当我尝试
时ListIterator<Integer> iter = list.listIterator(list.size());
for (int i = 0; i < size; i++) {
iter.hasPrevious();
list.addFirst(iter.previous());
}
我得到 ConcurrentModificationException 。我知道这意味着什么,但我如何将第一个元素添加到List并且迭代同时? 执行时间和内存限制至关重要。
答案 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视图的结构(不影响大小或迭代能力),就可以修改原始列表。