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)
但是,只要更改不是子列表视图的结构(不影响大小或迭代能力),就可以修改原始列表。
当我尝试做的时候
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)
但是,只要更改不是子列表视图的结构(不影响大小或迭代能力),就可以修改原始列表。