java同时迭代list和addFirst



当我尝试做

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

我得到ConcurrentModificationException。我知道这意味着什么,但是我怎么能添加第一个元素到List和迭代它在同一时间?执行时间和内存限制至关重要

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

注意,在添加时直接迭代sublist可能会导致同样的问题,因为sublist只返回原始列表的视图。看到http://docs.oracle.com/javase/7/docs/api/java/util/List.html分表(int, int % 20)

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

最新更新