集合框架
目的
实现传统数据结构
接口与实现分离
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
对象是集合对象自己在内部创建的,它自己知道如何高效遍历内部的数据集合,调用方则获得了统一的代码。
声明:本文部分素材转载自互联网,如有侵权立即删除 。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容