【问题标题】:How to get forward iterator that starts from the last element如何获取从最后一个元素开始的迭代器
【发布时间】:2026-01-13 19:55:02
【问题描述】:

我有一个LinkedList。假设我要在最后插入一个元素,并且我想保存它插入的位置,这样我就可以在它旁边的元素上调用一个函数,无论以后设法进入这个集合。 Java迭代器有可能吗?非常感谢。

回想一下,我对反向迭代不感兴趣。应用程序将是多线程的,因此有奇怪的要求。

【问题讨论】:

  • list.offerFirst(list.removeLast()) 呢?

标签: java linked-list iterator


【解决方案1】:

您可以使用 index = size() -1 调用 List#listIterator(int index) 以获取指向列表当前最后一个元素的迭代器。见文档:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/List.html

但是,你会从那里被卡住。

您使用的 List 实现是否不是线程安全的,LinkedList、ArrayList 和大多数其他实现都是如此,并且在列表结构修改后使用迭代器的任何尝试都将导致 ConcurrentModificationException被抛出。 当列表的大小发生变化时,即在添加和删除时,列表会在结构上进行修改。

或者您使用的 List 实现是线程安全的,在这种情况下,您无法保证迭代器可以访问在创建迭代器后添加到列表中的元素。 例如,CopyOnWriteArrayList 就不是这种情况,它的迭代器会像创建时一样迭代数据(如快照)。

您必须找到一个明确描述此行为并在其文档中明确说明的 List 实现。据我所知,至少在标准库中不存在任何允许它。

【讨论】: