1.Iterator是什么?
Iterator是一个集合迭代器,用来遍历Collection集合。在Collection接口中封装了获取Iterator迭代器的方法。
2.Iterator接口中的三个重要方法
boolean hasNext();
E next();
void remove();
3.如何获取迭代器?

Collection<E> c=...;//具体的某一个实现了Coll接口的集合
Iterator<E> iter=c.iterator();

4.使用迭代器
方式1:使用while循环

while(hasNext()){//判断是否还有下一个元素
   E e=next();//获取一个元素
   ...
}

方式2:使用“for each”循环
java编译器会将“for each”循环转换成带有迭代器的循环。

for(E e:c){...}

5.hasNext()方法
hasNext()方法用于判断是否还有下一个元素,若有则返回true。若无则返回false。常用于循环的判断条件。
6. next() 方法
next()方法用于查找一个元素,并返回查找到的那个元素的引用。可以认为迭代器位于两个元素之间,当调用next()方法时,迭代器就会越过下一个元素,并返回刚刚越过的那个元素的引用。

7.remove()方法
remove()方法将会删除上次调用next()方法时返回的那个元素。如果想要删除某个指定的元素,首先需要使用next()方法越过该元素。remove()方法与next()方法存在依赖性,如果调用remove()方法前未使用next()方法,则会报出IllegalStateException异常。如果想要删除相邻位置上的两个元素,那么这样写是错误的:

remove();
remove();//error

8.Iterator迭代器的局限性
相较于数组基于索引模型的迭代器,Iterator迭代器具有以下局限性:

  • 灵活性差:相较于数组的索引,Iterator迭代器不支持随机移动,只能向紧邻的下一位查找。
  • 查找操作与位置变更紧密耦合:如果知道数组索引 i,就可以查找到元素a[i]。即使不查找元素,也可以使索引位置变更。而Iterator就无法做到这一点,Iterator查找元素的唯一方法是调用next()方法,在查找过程中迭代器的位置随之变更。

9.为何使用Iterator来迭代Collection集合?(个人见解)
虽然Iterator迭代器具有局限性,但其实现了一种Collection集合的统一迭代方式,这便于多态的实现。需要注意的是,Collection接口的实现类具有多种,其底层数据结构并不一致,包括数组,链表等,这些结构并不都支持以索引的形式遍历集合。因此,为了方便使用多态,就需要有一种统一的遍历方式来规避因底层数据结构不同带来的差异,即Iterator迭代器。另外,支持索引形式进行迭代的集合,如ArrayList,也都单独给出了以索引形式进行遍历集合的方法。