开发者社区> 我哩个去> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
深入分析java中的泛型机制
想要学好java,泛型机制是一个必须要掌握的知识点,无奈很多书上写的不是很啰嗦,就是概念太多难以理解,因此参考了很多篇文章,对其进行整理了一下,希望对你有所帮助。
37 0
史上最全的Java容器集合之ArrayList(源码解读)(下)
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820… 种一棵树最好的时间是十年前,其次是现在
26 0
史上最全的Java容器集合之ArrayList(源码解读)(上)
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820… 种一棵树最好的时间是十年前,其次是现在
23 0
Java源码解读 --- ArrayList
上次说到HashMap的源码,这次来聊聊ArrayList的源码。
26 0
ArrayList源码解读—Java8版本(下)
ArrayList源码解读—Java8版本(下)
27 0
ArrayList源码解读—Java8版本(中)
ArrayList源码解读—Java8版本(中)
18 0
SAP中smartform中的图片如何在不同服务器之间传递
你在DEV上编码report然后绘制smartform,其中肯定用到了某些logo图片之类的。那么你在DEV上的图片怎么搞到PRD上呢?答案当然还是,请求的传输然后访问事务码SE78查找这个图后面的工作就是建立一个新的请求,然后传送它
1378 0
适配器在JavaScript中的体现
适配器设计模式在JavaScript中非常有用,在处理跨浏览器兼容问题、整合多个第三方SDK的调用,都可以看到它的身影。 其实在日常开发中,很多时候会不经意间写出符合某种设计模式的代码,毕竟设计模式就是老前辈们总结提炼出来的一些能够帮助提升开发效率的一些模版,源于日常的开发中。
1033 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载