我在Java中查看链接列表,在C中学习它们,我注意到我可以使用迭代器类来遍历链接列表。但我发现奇怪的是,他们使用ListIterator对列表进行向前迭代(它还可以根据指针所在的位置向后迭代),使用Iterator对列表进行反向迭代。我的问题是,为什么我们不能使用Iterator来前后迭代呢?这两者有什么区别呢?
发布于 2017-11-13 16:41:00
爱尔兰人
Iterator是一个非常通用的解决方案,它应该适用于all data-structures,实际上您可以在Collection (文档)中迭代的每个类。但是,并不是每个类都能确保向后迭代,仅仅是因为它们的内部数据结构。例如,TreeSet只知道它的根元素:

因此,Iterator试图适应所有数据结构的共同能力,使其至少可以在单向 (文档)中迭代。
ListIterator
ListIterator是一个特殊的,不是一般的,解决方案只能用于特殊的List,因为由于它们的内部结构,它们可以在两个方向上迭代(并且允许在两者之间添加和删除元素)。这在TreeSet这样的其他结构中是不可能的,所以Collection没有为所有Collection提供ListIterator,只有List提供了它。从它的文档
列表的迭代器,它允许程序员在任一方向遍历列表,在迭代期间修改列表,并获得迭代器在列表中的当前位置。
最后,如果Collection提供像ListIterator这样的特殊Iterator,那么所有的实现类,也包括TreeSet和co。需要实现这个方法。然而,这些类可能无法满足这一要求(不需要额外的开销)。
https://stackoverflow.com/questions/47269140
复制相似问题