链接列表:Iterator与List Iterator

时间:2017-11-13 16:31:35

标签: java list linked-list iterator

我正在查看Java中的链表,用C学习它们,我注意到我可以使用迭代器类来浏览链表。但我发现奇怪的是,他们使用ListIterator在列表上向前迭代(它也可以用于根据指针的位置向后迭代),迭代器在列表上向后迭代。我的问题是,为什么我们只能使用Iterator迭代向前和向后迭代?这两者有什么区别?

2 个答案:

答案 0 :(得分:1)

From the API:

  

列表的迭代器,允许程序员在任一方向遍历列表,在迭代期间修改列表,并获取迭代器在列表中的当前位置。

相反,Iterator can only iterate forwards.

答案 1 :(得分:1)

迭代

Iterator非常通用的解决方案,它应该适合所有数据结构,实际上您可以迭代每个Collectiondocumentation)。但是,并非每个类都可以确保仅仅由于其内部数据结构而向后迭代。例如TreeSet只知道 root 元素:

TreeSet structure

所以Iterator尝试使所有数据结构的共同能力至少在一个方向上可迭代documentation

的ListIterator

ListIterator特殊,而非一般,解决方案仅适用于特殊List,因为它们的内部结构可能是在两个方向上迭代(并且还允许在其间添加和删除元素)。对于TreeSet等其他结构,这是不可能的,因此Collection不会为所有ListIterator提供Collection,只有List拥有它。来自documentation

  

列表的迭代器,允许程序员在任一方向遍历列表,在迭代期间修改列表,并获取迭代器在列表中的当前位置。

要进行整理,如果Collection提供一个特殊的Iterator,例如ListIterator,那么所有实施类,TreeSet和co。需要实现这个方法。但是,这些类可能无法满足该要求(无需额外的额外开销)。