据我所知,Iterator和ListIterator之间的主要区别是
迭代器:使您只能在向前方向上循环收集,以获取或删除元素
ListIterator:它扩展了Iterator,允许列表的双向遍历和元素的修改
如果ListIterator比Iterator更强大,那么sun java开发人员应该只为ListIterator提供实现并弃用迭代器.为什么Iterator仍然存在于java中?使用Iterator比使用ListIterator有什么好处吗?
Cam*_*ner 12
这是因为并非所有集合都支持前向和后向迭代.ListIterators
特别适用于具有列表语义的集合,即它们定义元素的排序.某些集合类型(Sets
例如)不定义其元素的顺序,因此ListIterator
对它们没有意义.
当迭代器实现需要维持足够的状态以支持前向和后向迭代以及就地修改时,还会产生额外的开销.通过支持两者Iterator
,ListIterator
可以在需要时实现轻量级Iterator
,而ListIterator
对于需要额外功能的情况则可以更重.
仅仅因为某些事情可以做得更多,并不能使它成为工作的正确工具.
在Iterator
vs. 的情况下ListIterator
,并非每个集合都需要支持双向迭代.此外,具有的变异功率量ListIterator
不一定适合于一般迭代.最后,ListIterator
提供了访问元素索引的方法,但许多集合没有索引的概念.所以你可以说这对大多数收藏ListIterator
来说太强大了.事实上,有些人可能已经认为Iterator
"太强大",因为它提供了一种remove
方法,但这种方法并不总是合适的.
这里的基本指导因素是"清单"部分ListIterator
; 虽然Iterator
对所有集合都有用,但ListIterator
它特别适用于像列表一样具有明确定义的元素线性排序的集合.
一些ListIterator
有用的例子:
其中的一些例子ListIterator
是不适合: