ArrayList中的迭代器

简介:

ArrayList需要遍历时,可以调用他的iterator()方法返回一个迭代器,然后用迭代器进行遍历。

ArrayList中的iterator

public Iterator<E> iterator() {

returnnew Itr();

}

iterator()方法放回了一个Itr类实例,这个Itr类是ArrayList的一个内部类,实现了Iterator接口。

Itr源码如下:

/**

* An optimized version of AbstractList.Itr

*/

privateclass Itr implements Iterator<E> {

intcursor; // index of next element to return

intlastRet = -1; // index of last element returned; -1 if no such

intexpectedModCount = modCount;

publicboolean hasNext() {

returncursor != size;

}

@SuppressWarnings(“unchecked”)

public E next() {

checkForComodification();

inti = cursor;

if (i >= size)

thrownew NoSuchElementException();

Object[] elementData = ArrayList.this.elementData;

if (i >= elementData.length)

thrownew ConcurrentModificationException();

cursor = i + 1;

return (E) elementData[lastRet = i];

}

publicvoid remove() {

if (lastRet < 0)

thrownew IllegalStateException();

checkForComodification();

try {

ArrayList.this.remove(lastRet);

cursor = lastRet;

lastRet = -1;

expectedModCount = modCount;

} catch (IndexOutOfBoundsException ex) {

thrownew ConcurrentModificationException();

}

}

finalvoid checkForComodification() {

if (modCount != expectedModCount)

thrownew ConcurrentModificationException();

}

}

Itr类的三个成员变量。

cursor类似游标,指向迭代器下一个值的位置。

lastRet是迭代器最后一次取出的元素的位置。

expectedModCount的值为Itr初始化时候ArrayListmodCount的值。

modCount用于记录ArrayList内发生结构性改变的次数,而Itr每次进行nextremove的时候都会去检查expectedModCount值是否还和现在的modCount值,从而保证了迭代器和ArrayList内数据的一致性。

源码下载:

链接: http://pan.baidu.com/s/1pJK9jon

相关文章
|
存储 SQL 分布式计算
浅谈MPP数据库-Vertica
用过这块数据库3年时间,很多功能非常强大,POC做了很多数据库,查询性能可以说是最好的,推荐一下
2931 2
|
Linux Python
必备收藏| centos7安装Python3并且将pip设置为Python3中的pip
必备收藏| centos7安装Python3并且将pip设置为Python3中的pip
556 0
|
存储 Cloud Native 关系型数据库
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
532 3
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
|
12月前
|
安全 Shell 网络安全
设置 码云 SSH 推送和拉取代码
设置 码云 SSH 推送和拉取代码
451 0
|
Linux
centos之--目录权限配置
CentOS中,可以使用chmod命令来设置文件夹的权限
730 0
|
安全 Unix Linux
samba 配置文件解析
【8月更文挑战第8天】Samba是一款开源软件套件,支持不同操作系统间的文件与打印机共享。它通过实现SMB/CIFS协议,确保了Linux/UNIX系统与Windows系统的互操作性。Samba具备文件共享、打印机管理、安全性设置及域控制器等功能,适用于搭建文件服务器、打印服务器及身份验证服务,并促进跨平台的数据访问与协作。其配置灵活,可根据需要调整共享目录的权限、可见性及用户认证方式。
284 3
|
存储 安全 数据安全/隐私保护
配置本地安全策略(一)
配置本地安全策略(一)
395 0
|
运维 Cloud Native 数据可视化
祝贺!极氪登陆纽交所,阿里云提供支持
祝贺!极氪登陆纽交所,阿里云提供支持
284 2
|
缓存 边缘计算 负载均衡
如何理解CDN?说说实现原理?
CDN(内容分发网络)是提升网络访问速度的关键技术,通过在全球或全国范围内设立边缘服务器,将内容缓存到靠近用户的地方。当用户访问网站时,DNS返回CNAME,引导用户连接到最近的CDN节点,而非直接到源站。CDN的负载均衡系统依据用户位置、运营商、节点负载等因素选择最佳边缘节点提供服务,而缓存系统则存储常用资源以提高命中率,减少回源请求。高命中率使得CDN能显著提高网站性能,降低网络拥塞。
3484 0
|
Java
java中FileOutputStream流中有参构造方法有无append形参的区别--超详细讲解版
java中FileOutputStream流中有参构造方法有无append形参的区别--超详细讲解版
145 0