为什么java中的集合没有只读迭代器概念?

adi*_*tya 2 java collections design-patterns

java 的Enumeration接口有2个方法

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

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

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

NPE*_*NPE 6

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

文档:

Iterator取代了EnumerationJava Collections Framework.迭代器在两个方面与枚举不同:

  • 迭代器允许调用者在迭代期间使用定义良好的语义从底层集合中删除元素.
  • 方法名称已得到改进.

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

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

好吧,如果你不想修改集合,那就不要打电话remove().如果你真的,真的不相信自己,你可以使用Collections.unmodifiableCollection()et al创建一个只读包装器.

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

for (String s : str_list) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

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

  • 关于“然后不要调用`remove()`”评论:对于API 设计者来说,这可能是一个真正的问题。这绝不只是一个“我相信自己”的问题/问题。通过不可修改集合的运行时方法可以防止最坏的情况。但这远非理想。 (3认同)