Java中的集合(十五) Iterator 和 ListIterator、Enumeration
Java中的集合(十五) Iterator 和 ListIterator、Enumeration
一、Iterator
(一)、简介
Iterator 是一个接口,它是集合的迭代器。集合可以通过Iterator去遍历集合中的元素。把访问逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合的内部结构。
(二)、常用API

实例:

(三)、特点
- 只能单向移动遍历。
- 迭代器在迭代期间可以从集合中移除元素(通过迭代器删除)。
- 不能在迭代时通过集合对象添加,删除元素。
(四)、相关问题
1、Iterator遍历时不可以删除、添加集合中的元素问题
集合对象创建迭代器时,迭代器维护了 expectedModCount 属性,该属性记录了集合的大小(modCount),当集合对象调用 add()、remove() 等有可能修改集合长度的方法时,modCount 修改了,而 expectedModCount 没有及时更新,就会抛出 ConcurrentModificationException 异常。
2、移除元素
iterator.remove()是唯一安全的方式来在迭代过程中修改集合;如果在迭代过程中以任何其它的方式修改了基本集合将会产生未知的行为。而且每调用一次next()方法,remove()方法只能被调用一次,如果违反这个规则将抛出 IllegalStateException 异常。
二、ListIterator
(一)、简介
ListIterator是一个功能更加强大的迭代器,它继承于 Iterator 接口,只能用于各种 List 集合类型及其子类的访问。可以通过调用 listIterator() 方法产生一个指向 List 集合的ListIterator,,还可以调用 listIterator(n) 方法创建一个一开始就指向列表索引为n的元素处的 ListIterator。
(二)、常用API

(三)、特点
- 支持双向遍历(正向 / 反向遍历)。
- 产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引。
- 提供丰富的API对集合的操作。
- 可以使用add()方法在next()方法返回的元素之前或previous()方法返回的元素之后插入一个元素。
- 可以使用set()方法替换它访问过的最后一个元素。
(四)、允许遍历时添加、删除和修改的问题
ListIterator在执行添加、删除等更新操作时,会同时更新 expectedModCount 和 modCount 属性。
三、迭代器遍历、删除图示
(一)、遍历

(二)、删除

四、Enumeration
(一)、简介
Enumeration(枚举器)接口的作用和 Iterator 类似,但是只提供了遍历Vector和Hashtable类型集合元素的功能,不支持元素的移除操作。
(二)、常用API

(三)、特点
- 只可以遍历 Vector 和 Hashtable类型的集合。
- 不支持fail-fast机制。
- 遍历速度比迭代器快。
五、Iterator和ListIterator的区别
- ListIterator有add()方法,可以向List中添加对象,而Iterator不能
- ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。
- ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。
- 都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。
六、Iterator和Enumeration的区别
- 任何集合对象都可以使用Iterator遍历,Enumeration只能遍历 Vector 和 Hashtable 类型的集合对象。
- Enumeration只提供遍历的功能,Iterator不仅提供遍历,还可以执行删除操作。
- Iterator支持fail-fast机制,而Enumeration不支持。
Java中的集合(十五) Iterator 和 ListIterator、Enumeration的更多相关文章
- Java中的集合(十四) Map的实现类LinkedHashMap
Java中的集合(十四) Map的实现类LinkedHashMap 一.LinkedHashMap的简介 LinkedHashMap是Map接口的实现类,继承了HashMap,它通过重写父类相关的方法 ...
- Java中的集合(十二) 实现Map接口的WeakHashMap
Java中的集合(十二) 实现Map接口的WeakHashMap 一.WeakHashMap简介 WeakHashMap和HashMap一样,WeakHashMap也是一个哈希表,存储的也是键值对(k ...
- Java中的集合(五)继承Collection的List接口
Java中的集合(五)继承Collection的List接口 一.List接口简介 List是有序的Collection的,此接口能够精确的控制每个元素插入的位置.用户能够根据索引(元素在List接口 ...
- Java中的集合Collection、Iterator和Foreach用法(一)
1.Java集合概述 在编程中,常常需要集中存放多个数据.当然我们可以使用数组来保存多个对象.但数组长度不可变化,一旦在初始化时指定了数组长度,则这个数组长度是不可变的,如果需要保存个数变化的数据,数 ...
- Java 设计模式系列(十五)迭代器模式(Iterator)
Java 设计模式系列(十五)迭代器模式(Iterator) 迭代器模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(interna ...
- 201871010105-曹玉中《面向对象程序设计(java)》第十五周学习总结
201871010105-曹玉中<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个过程 https://www.cnblogs.com/nwnu-daizh/ ...
- Java中的集合(十三) 实现Map接口的Hashtable
Java中的集合(十三) 实现Map接口的Hashtable 一.Hashtable简介 和HashMap一样,Hashtable采用“拉链法”实现一个哈希表,它存储的内容是键值对(key-value ...
- Java中的集合框架-Collection(二)
上一篇<Java中的集合框架-Collection(一)>把Java集合框架中的Collection与List及其常用实现类的功能大致记录了一下,本篇接着记录Collection的另一个子 ...
- Java中的集合(十一) 实现Map接口的TreeMap
Java中的集合(十一) 实现Map接口的TreeMap 一.TreeMap简介(基于JDK1.8) TreeMap是基于红黑树数据结构,是一个key-value的有序集合,该映射根据其键的自然顺序进 ...
随机推荐
- unittest(@classmethod 装饰器)
1.前言: 前面讲到unittest里面setUp可以在每次执行用例前执行,这样有效的减少了代码量,但是有个弊端,比如打开浏览器操作,每次执行用例时候都会重新打开,这样就会浪费很多时间. 于是就想是不 ...
- CC2530通用IO口的输入输出
一.引脚概述 CC2530有40 个引脚.其中,有21个数字I/O端口,其中P0和P1是8 位端口,P2仅有5位可以使用.P2端口的5个引脚中,有2个需要用作仿真,有2个需要用作晶振.所以可供我们使用 ...
- C#学习笔记——数据类型
数据类型 sbyte x; //8bit,有符号,表示-128~127 bite x; //8bit,无符号,表示0~255 short x; //16bit,有符号整型 ushort x; //16 ...
- MySQL 入门(3):事务隔离
摘要 在这一篇内容中,我将从事务是什么开始,聊一聊事务的必要性. 然后,介绍一下在InnoDB中,四种不同级别的事务隔离,能解决什么问题,以及会带来什么问题. 最后,我会介绍一下InnoDB解决高并发 ...
- 一篇文章彻底理解Redis持久化:RDB和AOF
为什么需要持久化? Redis对数据的操作都是基于内存的,当遇到了进程退出.服务器宕机等意外情况,如果没有持久化机制,那么Redis中的数据将会丢失无法恢复.有了持久化机制,Redis在下次重启时可以 ...
- [hdu5323]复杂度计算,dfs
题意:求最小的线段树的右端点(根节点表示区间[0,n]),使得给定的区间[L,R]是线段树的某个节点. 数据范围:L,R<=1e9,L/(R-L+1)<=2015 思路:首先从答案出发来判 ...
- 配置类为什么要添加@Configuration注解呢?
配置类为什么要添加@Configuration注解呢? 本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 推荐阅读: Spring官网阅读 | 总结篇 Spring ...
- prev_permutation和next_permutation函数
作用 prev_permutation():简单地来说,就是求上一个比当前数列小的数列 例如:{1,2,3,5,4}的上一个比当前数列 ( 当前数列就是{1,2,3,5,4} ) 小的数列就是{1 ...
- python --整理数据结构(列表)
该整理来源于:https://www.runoob.com/python3/python3-data-structure.html 列表 python中列表是可变的,这是它区别于字符串和元组的最重要的 ...
- java 版本比较
public class version { public static int compareVersion(String version1, String version2) throws Exc ...