Java 枚举和迭代器之间的区别

2022-08-31 08:14:15

这两个接口之间的确切区别是什么?枚举比使用迭代器有好处吗?如果有人能详细说明,将不胜感激。


答案 1

看看迭代器接口的 Java API 规范,有一个关于枚举之间差异的解释:

迭代器在两个方面与枚举不同:

  • 迭代器允许调用方在迭代期间使用明确定义的语义从基础集合中删除元素。
  • 方法名称已得到改进。

底线是,两者都将给出连续的元素,但是通过缩短措辞来改进方法名称,并且它具有一个附加方法。以下是并排比较:EnumerationIteratorIteratorremove

  Enumeration                     Iterator
  ----------------                ----------------
  hasMoreElements()               hasNext()
  nextElement()                   next()
  N/A                             remove()

正如 Java API 规范中也提到的那样,对于较新的程序,应该优先于 ,因为“迭代器取代了 Java 集合框架中的枚举”。(来自迭代器规范。IteratorEnumeration


答案 2

迭代器是快速失败的。即,当一个线程通过添加/删除操作更改集合时,当另一个线程使用方法通过迭代器遍历它时,迭代器通过抛出而快速失败。迭代器的快速失败行为只能用于检测 Bug。由 Hashtable、Vector 等类的方法返回的枚举不是通过同步锁定当前 Vector 对象的方法中的代码块来实现的,这会花费大量时间。hasNext() or next()ConcurrentModificationExceptionnextElement()