java 同时迭代 list 和 addFirst

java iterate list and addFirst at the same time

当我尝试做的时候

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

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

我得到 ConcurrentModificationException。我知道那是什么意思,但是如何才能 add first element 到 List 并同时 iterate 呢? 执行时间和内存限制至关重要

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

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

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