在面试中,迭代器被问到了很多次,今天来总结一下。
从一个例子说起。
public static void main(String args[]){
List list=new ArrayList();
list.add(2);
list.add(5);
list.add(7);
Iterator Itr=list.iterator();
while(Itr.hasNext()){
System.out.println(Itr.next());
}
}
上面的例子很简单,但说明了迭代器最基本的结构:
1. 得到迭代器;
2. 判断是否有元素;
3. 获取元素。
现在到源码里去看它们是怎样实现的。
public Iterator<E> iterator() {
return new Itr();
}
其实它里面有一个内部类的,再看这个类的成员有哪些。
// 初始值为0,这个与C语言不一样,C是不确定的值
int cursor; // index of next element to return
int lastRet = -1; // index of last element returned; -1 if no such
int expectedModCount = modCount;
下面是hasNext()方法的实现。
public boolean hasNext() {
return cursor != size;
}
简单吧,就是判断当前的指针是否到最后了,我们猜测当前指针的变化应该是在next()方法中实现的。
public E next() {
checkForComodification();
int i = cursor;
if (i >= size)
throw new NoSuchElementException();
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
throw new ConcurrentModificationException();
cursor = i + 1;
return (E) elementData[lastRet = i];
}
其中的elementData是存储数据的地方,这个在开始就定义了。
private transient Object[] elementData;
这个数组的初始化在什么时候完成的呢?在你new的时候,默认大小是10.
public ArrayList() {
this(10);
}
总体来讲,迭代器还是比较简单的吧。
分享到:
相关推荐
用java编写的迭代器,实现10数字正反向遍历。
java迭代器 文章目录java迭代器Iterator 迭代器接口迭代器的方法:next():返回迭代中的下一个元素。hasNext():如果迭代具有更多元素...迭代器模式,就是为容器而生。 Iterator仅用于遍历集合,lterator本身并不提供
2.定义一个Iterator迭代器的接口 3.定义一个ArrayList,实现Collection接口,并写一个实现了Iterator接口的内部类。 4.编写测试程序TestMain 从以上可以看出,设计模式到处用到面向对象中的多态。接口调用子类中的...
提到迭代器我们不能不想到迭代器模式,那我就以迭代器模式作为开场白. 在我们的应用程序中常常有这样一些数据结构: 它们是一个数据的集合,如果你知道它们内部的实现结构就可以去访问它们,它们各自的内部存储结构互不...
// 迭代器(Iterator)模式,又叫做游标(Cursor)模式。 // GOF给出的定义为:提供一种方法访问一个容器(container)对象中的各个元素, // 而又不需暴露该对象的内部细节。 // 学习set对象容器的使用 // set容器...
设计模式之 Iterator(迭代器) 这个模式已经被整合入Java的Collection.在大多数场合下无需自己制造一个Iterator,只要将对象装入Collection中, 直接使用 Iterator 进行对象遍历。 设计模式之 Template(模板方法) ...
迭代器 泳池 辛格尔顿 原型 观察者模式 装饰图案 搜索 二元搜寻 种类 气泡 合并 数数 基数 快的 随机数发生器 LCG: : Java功能: 注解 自定义ArrayList,HashMap(以及更多)实现 克隆 定制比较器 一些常见的...
反射有三种获取的⽅式,分别是:forName / getClass / 直接使⽤class⽅式 使⽤反射可以获取类的实例 1-6)列出⾄少五种设计模式 设计⽅式有⼯⼚法,懒加载,观察者模式,静态⼯⼚,迭代器模式,外观模式、、、、 1-...
4.15 Iterator迭代器 42 4.16泛型 43 4.17增强型for循环 43 4.18 List高级-数据结构:Queue队列 44 4.19 List高级-数据结构:Deque栈 44 4.20 Set集合的实现类HashSet 45 4.21 Map集合的实现类HashMap 46 4.22单例...
本书是为全英文版本。 《Java完美编程(第3版)》,英文名《Absolute Java (3rd Edition)》,英文版出版社:Addison ...第16章 稽核,映射和迭代器 第17章 初探swing 第18章 深入swing 第19章 java的发展永无止境
迭代器,策略和适配器设计模式 使用说明 在本实验中,您将有机会完成一个工具,该工具可以计算从标准输入中读取的单词的频率。 然后,该工具以降序打印(最多)10个最常见的单词及其频率。 例: Run > Run main ...
迭代器,策略和适配器设计模式 指示 在本实验中,您将有机会完成一个工具,该工具可以对从标准输入中读取的单词的频率进行计数。 然后,该工具以降序打印(最多)10个最常见的单词及其频率。 例子: ./build/...
31. 迭代器 Iterator 是什么? 12 32. Iterator 怎么使用?有什么特点? 12 33. Iterator 和 ListIterator 有什么区别? 13 三、多线程 13 35. 并行和并发有什么区别? 13 36. 线程和进程的区别? 14 37. 守护线程是...
C#2.0-迭代器 C#2.0 的新增功能学习 泛型的序列化问题 .NET 2.0 泛型在实际开发中的一次小应用 C#2.0 Singleton 的实现 .Net Framwork 强类型设计实践 通过反射调用類的方法,屬性,字段,索引器(2種方法) ASP.NET: ...
ArrayList 和可调整大小的数组 字符串生成器 链表 创建链表 从单向链表中删除节点 “跑者”技术 递归问题 堆栈和队列 实现堆栈 引入队列 树和图 树的种类 二叉树遍历 二叉堆(最小堆和最大堆) 尝试(前缀树) 图表 ...