集合框架-Iterator
来源:互联网 发布:mac添加桌面小组件 编辑:程序博客网 时间:2024/06/05 14:13
一、Iterator接口是Java Collections Framework的成员,它对集合进行迭代,并且它代替了 Java Collections Framework 中的 Enumeration,两者有以下两点不同:
- Iterator允许调用方利用定义良好的语义在迭代期间从迭代器所指向的集合移除元素。
- 方法名称得到了改进。
二、Iterator方法介绍
- boolean hasNext() 如果存在可访问的元素,返回true。
- E next() 返回将要访问的下一个对象。如果已经到达集合的尾部,将抛出一个NoSuchElementException,因此需要在调用next()之前调用hasNext()。
- void remove() 删除上一次调用next()之后返回的元素。这个方法必须紧跟在访问一个元素之后执行。如果上次访问之后,集合已经发生了变化,这个方法将抛出一个IllegalStateException。
- forEachRemaining(Consumer< ? super E > action) 为每个剩余元素执行给定的操作,直到所有的元素都已经被处理或抛出一个异常。
三、使用迭代器遍历集合
- 请求一个迭代器,并在hasNext()返回true时反复调用next(),可以遍历集合中的所有元素。
List<Integer> list = new ArrayList<Integer>();Iterator<Integer> it = list.iterator();while (it.hasNext()) { Integer element = it.next(); //do something with element}
- 从JavaSE 5.0起这个循环可以采用更优雅的for each循环代替。编译器简单的把“for each”循环翻译为带有迭代器的循环,“for each”循环可以与任何实现了Iterable接口的对象一起工作。(Collection类扩展了Iterable,因此对于标准类库中的集合均可以使用“for each”循环。)
for (Integer element : list) { //do something with element}
- 注意:使用Iterator来遍历集合时,应使用Iterator的remove()方法来删除集合中的元素,使用集合的remove()方法可能会抛出ConncurrentModificationException异常。原因是Iterator 是工作在一个独立的线程中,并且拥有一个mutex锁。Iterator被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,所以当索引指针往后移动的时候就找不到要迭代的对象,按照fail-fast原则Iterator会马上抛出java.util.ConcurrentModificationException 异常。因此Iterator在工作的时候是不允许被迭代的对象被改变的。但可以使用Iterator本身的方法remove()来删除对象,Iterator.remove()方法会在删除当前迭代对象的同时维护索引的一致性。示例代码如下。
public void iteratorRemoveTest() { List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(3); list.add(5); Iterator<Integer> it = list.iterator(); Integer num; while (it.hasNext()) { num = it.next(); if (5 == num) { it.remove();// list.remove(num); // error continue; } System.out.println(num); } }
阅读全文
0 0
- 集合框架-Iterator
- 集合框架三迭代器(Iterator)
- 黑马程序员_集合框架(Collection,Iterator)
- JAVA集合框架——Iterator
- 集合框架——迭代器Iterator
- 集合框架(二) 迭代器Iterator
- 集合框架方法和迭代器Iterator
- 集合-Iterator
- 黑马程序员--07.集合框架--02.【迭代器Iterator】
- 集合框架总结——Collection、Iterator、List、Set、Map
- 黑马程序员-- 集合框架 (Collection, Iterator,泛型)
- Java集合框架:ArrayList、LinkedList、HashSet、TreeSet、HashMap、Iterator
- java集合框架系列---Iterator和Enumeration比较
- Java基础-集合框架2 Collection和Iterator接口
- 使用Java实现面向对象编程--集合框架-->迭代器Iterator
- Java——集合框架之ArrayList,LinkedList,迭代器Iterator
- java集合框架和Iterator迭代器相关方法
- 集合框架-for、foreach、Iterator三种遍历方法
- Apache+PHP+MySQL环境搭建
- ubuntu安装JLink 驱动。终结总结
- 网络端口
- .\与..\的区别
- 快速排序算法及优化
- 集合框架-Iterator
- centos7编译安装mysql5.7
- 装系统
- MFC/C++创建单级目录与多级目录
- CSDN日报20170619 ——《深度学习,先跟上再说》
- 数学问题——最大公约数和最小公倍数(辗转相除法)
- bootstrap model弹出框的使用
- ViewPage用fragment填充
- “插件(application/x-vlc-plugin)不受支持”NPAPI和PPAPI的问题