在之前的集合中我们使用了两种不同的迭代器分别对不同的结合进行了遍历,分别是Enumation迭代器和Iterator迭代器。
二者有什么区别呢?
首先二者都是java.util工具包下的接口,二者的代码如下:
Enumeration:
Iterator:
public
interface
Iterator<E> {
boolean
hasNext();
E next();
void
remove();
看了代码了,我们很容易发现。
一: 函数接口不同
Enumeration只有2个方法。通过Enumeration,我们只能读取集合的数据,而不能对数据进行修改。
Iterator有3个方法。Iterator除了能读取集合的数据之外,也能数据进行删除操作。
二:Iterator的实现类一般都有fail-fast机制,而Enumeration不支持。
Enumeration 是JDK 1.0添加的接口。使用到它的函数包括Vector、Hashtable等类,这些类都是JDK 1.0中加入的,Enumeration存在的目的就是为它们提供遍历接口。
Enumeration本身并没有支持同步,而在Vector、Hashtable实现Enumeration时,添加了同步。
而Iterator 是JDK 1.2才添加的接口,它也是为了HashMap、ArrayList等集合提供遍历接口。Iterator是支持fail-fast机制的:当多个线程对同一个集合的内容进行操作时,就可能
会产生fail-fast。
什么是fail-fast呢?
通俗点来讲就是集合中采用的一种判断集合在遍历的时候判断结构有没有发生变化的一种检验bug的机制,采用一个计数器来进行比较。
下节我们会将一个多线程下使用的很多的集合--CopyOnWriteArrayList。