EnumerationIterator两个接口都是用来遍历集合对象的。他们提供了相同的方法遍历集合,但是两者也有一些区别。

来源

Iterator产生自JDK 1.2,Enumeration产生自JDK1.0.

remove()方法

EnumerationIterator主要的区别就是这个。Enumeration只能遍历集合,在遍历中不能修改集合的结构(删除集合的元素)。Iterator允许在遍历的时候,删除集合中元素。

Iterator Enumeration
hasNext() hasMoreElememts()
next() nextElement()
remove() --

Legacy Interface 遗留接口

Enumeration是一个遗留接口,只能用于遍历Vector,HashTableStackIterator不是,它支持遍历大多数集合。例如ArrayList,LinkedList,HashSet,LinkedHashSet,TreeSet,HashMap,LinkedHashMap,TreeMap等。

Fail-Fast VS Fail-Safe

IteratorFail-Fast机制。如果在迭代时集合被外部修改(不是通过remove()修改)了,就会抛出ConcurrentModificationException异常。

EnumerationFail-Safe机制。当集合在遍历时被外部修改,它不会抛出异常,

安全可靠

IteratorFail-Fast机制,不允许在遍历集合时,集合被其他线程修改。与Enumeration比较,它相对安全。

选择使用谁

推荐优先使用Iterator迭代器,而不使用Enumeration枚举去遍历。

Enumeration Iterator
只能遍历集合,在遍历时不能修改集合 遍历时可以修改集合
产生自JDK1.0 产生自JDK1.2
只能用于遗留的集合类Vector Stack HashTable 能用于大多数集合
fail-safe机制 fail-fast机制
fail-safe机制遍历集合不安全 fail-fast机制能保证遍历时集合不被其他线程修改


Java     

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!