Enumeration
和Iterator
两个接口都是用来遍历集合对象的。他们提供了相同的方法遍历集合,但是两者也有一些区别。
来源
Iterator
产生自JDK 1.2,Enumeration
产生自JDK1.0.
remove()方法
Enumeration
和Iterator
主要的区别就是这个。Enumeration
只能遍历集合,在遍历中不能修改集合的结构(删除集合的元素)。Iterator
允许在遍历的时候,删除集合中元素。
Iterator | Enumeration |
---|---|
hasNext() |
hasMoreElememts() |
next() |
nextElement() |
remove() |
-- |
Legacy Interface 遗留接口
Enumeration
是一个遗留接口,只能用于遍历Vector
,HashTable
和Stack
。Iterator
不是,它支持遍历大多数集合。例如ArrayList
,LinkedList
,HashSet
,LinkedHashSet
,TreeSet
,HashMap
,LinkedHashMap
,TreeMap
等。
Fail-Fast VS Fail-Safe
Iterator
是Fail-Fast
机制。如果在迭代时集合被外部修改(不是通过remove()
修改)了,就会抛出ConcurrentModificationException
异常。
Enumeration
是Fail-Safe
机制。当集合在遍历时被外部修改,它不会抛出异常,
安全可靠
Iterator
的Fail-Fast
机制,不允许在遍历集合时,集合被其他线程修改。与Enumeration
比较,它相对安全。
选择使用谁
推荐优先使用Iterator
迭代器,而不使用Enumeration
枚举去遍历。
Enumeration | Iterator |
---|---|
只能遍历集合,在遍历时不能修改集合 | 遍历时可以修改集合 |
产生自JDK1.0 | 产生自JDK1.2 |
只能用于遗留的集合类Vector Stack HashTable |
能用于大多数集合 |
fail-safe机制 | fail-fast机制 |
fail-safe机制遍历集合不安全 | fail-fast机制能保证遍历时集合不被其他线程修改 |
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!