java迭代列表和addFirst同时

时间:2015-10-20 17:41:46

标签: 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 。我知道这意味着什么,但我如何将第一个元素添加到List并且迭代同时? 执行时间和内存限制至关重要

1 个答案:

答案 0 :(得分:1)

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

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

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