迭代器----是一个对象,他的工作是遍历并选择序列中的对象,而客户端的程序员不必知道和关心该序列底层的结构。迭代器通常被称为‘轻量级对象’,创建他的代价小。
AbstractList下的iterator()方法ArrayList就是继承这个方法:
public Iterator<E> iterator() {
return new Itr();
}
AbstractList下的内部类 Itr:
private class Itr implements Iterator<E> {
/**
* Index of element to be returned by subsequent call to next.
*/
int cursor = 0;
/**
* Index of element returned by most recent call to next or
* previous. Reset to -1 if this element is deleted by a call
* to remove.
*/
int lastRet = -1;
/**
* The modCount value that the iterator believes that the backing
* List should have. If this expectation is violated, the iterator
* has detected concurrent modification.
*/
int expectedModCount = modCount;
public boolean hasNext() {
return cursor != size();
}
public E next() {
checkForComodification();
try {
E next = get(cursor);
lastRet = cursor++;
return next;
} catch(IndexOutOfBoundsException e) {
checkForComodification();
throw new NoSuchElementException();
}
}
public void remove() {
if (lastRet == -1)
throw new IllegalStateException();
checkForComodification();
try {
AbstractList.this.remove(lastRet);
if (lastRet < cursor)
cursor--;
lastRet = -1;
expectedModCount = modCount;
} catch(IndexOutOfBoundsException e) {
throw new ConcurrentModificationException();
}
}
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
}
分享到:
相关推荐
标准模板库(STL)是C++编程语言的一个重要组成部分,它提供了一组高效且可重用的编程组件,包括容器、迭代器和算法。STL的设计理念是泛型编程,即代码应与特定的数据类型无关,这使得STL能够处理各种不同类型的对象...
7.1 迭代器与闭包...........40 7.2 范性for的语义...........42 7.3 无状态的迭代器.......43 7.4 多状态的迭代器.......44 7.5 真正的迭代器...........45 第8章编译·运行·调试47 8.1 require函数...........
8.11 迭代器和iter()函数 8.11.1 什么是迭代器 8.11.2 为什么要迭代器 8.11.3 如何迭代 8.11.4 使用迭代器 8.11.5 可变对象和迭代器 8.11.6 如何创建迭代器 8.12 列表解析...
8.11 迭代器和iter()函数 8.11.1 什么是迭代器 8.11.2 为什么要迭代器 8.11.3 如何迭代 8.11.4 使用迭代器 8.11.5 可变对象和迭代器 8.11.6 如何创建迭代器 8.12 列表解析...
第19章 NumPy中的多维迭代器 19.1 N维数组操作中的关键挑战 19.2 N维数组的内存模型 19.3NumPy迭代器的起源 19.4 迭代器的设计 19.5 迭代器的接口 19.6 迭代器的使用 19.7 结束语 第20章 NASA火星漫步者任务中的高...
9.9. 迭代器 9.10. 生成器 9.11. 生成器表达式 10. Python 标准库概览 10.1. 操作系统接口 10.2. 文件通配符 10.3. 命令行参数 10.4. 错误输出重定向和程序终止 10.5. 字符串正则匹配 10.6. 数学 10.7. 互联网访问 ...
8.11 迭代器和iter()函数 8.11.1 什么是迭代器 8.11.2 为什么要迭代器 8.11.3 如何迭代 8.11.4 使用迭代器 8.11.5 可变对象和迭代器 8.11.6 如何创建迭代器 8.12 列表解析...
8.4 带有迭代器的容器:List 8.5 迭代器的设计细节 8.6 性能上的考虑 8.7 对模板参数的限制 8.8 模板特化 8.9 小结 8.10 问题 第9章 重用 9.1 发现和获得 9.2 健壮性 9.3 内存管理 9.4 可选的内存分配方案 9.5 传递...
15.2.2 迭代器(Iterator) 15.3 链表List 15.3.1 链表List接口方法 15.3.2 链表迭代器接口 15.3.3 链表和数组链表 15.3.4 链表应用 15.3.5 数组链表应用 15.4 集Set 15.4.1 排序集接口 15.4.2 哈希集和树集 ...
2.8.3 配置文件迭代器 30 2.8.4 节迭代器 33 2.8.5 其他的配置文件操作 33 2.9 会话管理 34 2.10 Gtk+的主循环 36 2.10.1 主循环基本知识 36 2.10.2 退出函数 36 2.10.3 Timeout函数 37 2.10.4 idle函数 37 2.10.5 ...
2.8.3 配置文件迭代器 30 2.8.4 节迭代器 33 2.8.5 其他的配置文件操作 33 2.9 会话管理 34 2.10 Gtk+的主循环 36 2.10.1 主循环基本知识 36 2.10.2 退出函数 36 2.10.3 Timeout函数 37 2.10.4 idle函数 37 2.10.5 ...
17.7 用迭代器逐个访问Python序列的元素 608 17.8 从Python可调用的C函数中返回None 611 17.9 用gdb调试动态载入的C扩展 613 17.10 调试内存问题 614 第18章 算法 616 引言 616 18.1 消除序列中的重复 619 ...
6.4.2 基于元组的嵌套循环连接的迭代器 6.4.3 基于块的嵌套循环连接算法 6.4.4 嵌套循环连接的分析 6.4.5 迄今为止的算法的小结 习题 6.5 基于排序的两趟算法 6.5.1 利用排序去除重复 6.5.2 利用排序...
5.1.2 迭代器与Concurrent-ModificationException68 5.1.3 隐藏迭代器69 5.2 并发容器70 5.2.1 ConcurrentHashMap71 5.2.2 额外的原子Map操作72 5.2.3 CopyOnWriteArrayList72 5.3 阻塞队列和生产者-消费者...