为什么迭代器仍然存在于java中

1 java iterator

据我所知,Iterator和ListIterator之间的主要区别是

迭代器:使您只能在向前方向上循环收集,以获取或删除元素

ListIterator:它扩展了Iterator,允许列表的双向遍历和元素的修改

如果ListIterator比Iterator更强大,那么sun java开发人员应该只为ListIterator提供实现并弃用迭代器.为什么Iterator仍然存在于java中?使用Iterator比使用ListIterator有什么好处吗?

Cam*_*ner 12

这是因为并非所有集合都支持前向和后向迭代.ListIterators特别适用于具有列表语义的集合,即它们定义元素的排序.某些集合类型(Sets例如)定义其元素的顺序,因此ListIterator对它们没有意义.

当迭代器实现需要维持足够的状态以支持前向和后向迭代以及就地修改时,还会产生额外的开销.通过支持两者Iterator,ListIterator可以在需要时实现轻量级Iterator,而ListIterator对于需要额外功能的情况则可以更重.


Ken*_*nde 6

仅仅因为某些事情可以做得更多,并不能使它成为工作的正确工具.

Iteratorvs. 的情况下ListIterator,并非每个集合都需要支持双向迭代.此外,具有的变异功率量ListIterator不一定适合于一般迭代.最后,ListIterator提供了访问元素索引的方法,但许多集合没有索引的概念.所以你可以说这对大多数收藏ListIterator来说强大了.事实上,有些人可能已经认为Iterator"太强大",因为它提供了一种remove方法,但这种方法并不总是合适的.

这里的基本指导因素是"清单"部分ListIterator; 虽然Iterator对所有集合都有用,但ListIterator它特别适用于像列表一样具有明确定义的元素线性排序的集合.

一些ListIterator有用的例子:

  • 单一和双重链接列表
  • 数组列表
  • 其他具有明确线性排序的集合

其中的一些例子ListIterator适合:

  • 树木(其中很多,反正)
  • 地图
  • 其他没有线性排序的集合