CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

java学习笔记——集合(一)-源码交易平台丞旭猿

集合框架

目的

实现传统数据结构

接口与实现分离

Java 集合类库将接口实现分离,一旦构造了集合,就不需要知道究竟使用了哪种实现。一旦改变想法,就可以对程序的一个地方做出修改,轻松地使用另一种不同的实现。例如:

List<Integer>array=newArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,5));System.out.println(array.get(5));// 使用ArrayList效率高array.add(5,3);//使用LinkedList效率高

如果经常需要访问集合元素,使用ArrayList,这非常好。但现在array需要大量的增删,如果使用ArrayList,效率会非常的低,如果将接口与实现分离,只需要将实现改为LinkedList即可。

List<Integer>array=newLinkedList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,5));System.out.println(array.get(5));// 使用ArrayList效率高array.add(5,3);//使用LinkedList效率高

Collection接口

Java 类库中,集合类的基本接口是Collection接口,具有多种基本方法,使用简单,查询API即可。

重点需要注意的是其中的iterator方法,此方法返回了一个实现了Iterator接口的对象,可以使用这个迭代器对象依次访问集合元素。

publicinterfaceIterator<E>{Enext();booleanhasNext();voidremove();...}

Iterator接口

直接上手使用一下:

// 这段代码的目的是删除 array 中的数字 5List<Integer>array=newArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,5));Iterator<Integer>it=array.iterator();while(it.hasNext()){/*这里需要说明一下,java 迭代器位于两个元素之间当调用 next 时,迭代器就越过下一个元素,并返回刚刚越过的元素的引用remove()方法前必须调用next,否则就会抛出一个IllegalStateException异常*/inti=it.next();if(i==5)it.remove();}

以上代码也可以改为for each循环,当然了,对于编译器来说,它仍然是Iterator

如果我们自己写了一个集合类,需要满足以下条件:

  • 集合类实现Iterable接口,该接口要求返回一个Iterator对象;
  • Iterator对象迭代集合内部数据。
for(inti:array){if(i==5)it.remove();}

说了这么多,为啥要用这个东东呢?我直接for遍历岂不美哉?不然,看下面代码。

List<Integer>array=newLinkedList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,5));for(inti=0;i<array.size();i++){System.out.println(array.get(i));}

对于LinkedList来说,get()方法效率太低了!如果把LinkedList换为Set,代码直接无法通过编译,因为Set没有索引。

Iterator遍历就没有上述问题,因为Iterator对象是集合对象自己在内部创建的,它自己知道如何高效遍历内部的数据集合,调用方则获得了统一的代码。

声明:本文部分素材转载自互联网,如有侵权立即删除 。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容