java同时迭代list和addFirst

标签 java list linked-list iterator concurrentmodification

当我尝试做的时候

ListIterator<Integer> iter = list.listIterator(list.size());

for (int i = 0; i < size; i++) {
     iter.hasPrevious();
     list.addFirst(iter.previous());
}

我得到 ConcurrentModificationException。我知道那是什么意思,但我如何才能添加第一个 元素到列表中并同时迭代 它? 执行时间和内存限制至关重要

最佳答案

好吧,因为您知道列表的大小,因此知道要复制的第一个索引 - 您可以获取 subList 克隆并使用 addAll(0,..) 或使用 get(index++)addFirst(..) 方法。

请注意,在添加时直接迭代子列表可能会导致相同的问题,因为子列表仅返回原始列表的 View 。参见 http://docs.oracle.com/javase/7/docs/api/java/util/List.html#subList(int,%20int)

但是,只要更改不是子 ListView 的结构(不影响大小或迭代能力),就可以修改原始列表。

关于java同时迭代list和addFirst,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33243302/

相关文章:

c++ - 分配运算符(operator)在圆形双向链表中无法正常工作

algorithm - 如何在两个链表中找到最新的相等元素?

java - Unix: "ls"命令显示带 ? 的文件延长后

java - 从 Spring hibernate 开始

python - 替换列表中一之间的零

python - 如何在不删除/更改原始元素及其值的情况下将列表/数组中元素的索引更改为另一个位置/索引

c - 尝试编写一个删除节点的函数

java - 读取Java泛型类的注解

java - log4j中使用的模式是什么

python - 查找列表列表中n个列表中出现的元素