2

java的Enumeration 接口有2个方法

  1. 有下一个()
  2. 下一个()

为什么Iterator不扩展 Enumeration 并添加 remove 方法()?

此外,如果我只想循环遍历我的集合,我可以使用枚举(或迭代器,如果它扩展枚举),因为循环语句只需要枚举。我不必担心收藏被修改

4

3 回答 3

7

为什么不Iterator扩展Enumeration和添加remove()方法?

文档中:

IteratorEnumeration在 Java 集合框架中取代。迭代器在两个方面不同于枚举:

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

我怀疑后者是引入全新界面而不是扩展现有界面的真正原因。

此外,如果我只想循环遍历我的集合,我可以使用枚举(或迭代器,如果它扩展枚举),因为循环语句只需要枚举。我不必担心收藏被修改

好吧,如果您不想修改集合,请不要调用remove(). 如果您真的,真的不相信自己,您可以使用Collections.unmodifiableCollection()et al 创建一个只读包装器。

最后,值得注意的是,如果您使用 for-each 循环遍历集合,则remove()无论如何您都无法访问该方法:

for (String s : str_list) {
   ...
}

在这里,我们正在使用Iterator接口,但无法访问实际的迭代器对象。

于 2013-03-06T10:35:30.943 回答
2

您可以通过java.util.Collections.enumeration()方法从您的集合中获取 java.util.Enumerator 。

无论如何,如果您不想通过它的迭代器修改您的集合,只需不调用 remove() 方法即可。

于 2013-03-06T10:35:06.763 回答
-1

根据http://www.journaldev.com/1330/java-collections-interview-questions-and-answers#iterator-vs-enumeration,“枚举速度是迭代器的两倍,并且使用的内存非常少。枚举是非常基本的并满足基本需求。”

所以,我猜如果你不需要 remove(),那么使用 Enumeration 比使用 Iterator 更有效。

于 2014-02-25T09:33:37.597 回答