当我尝试做的时候
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/