我正在尝试对主线程中列表的每个值进行一些计算,如下所示
for (int i = 0; i < list.size(); i++) {
//Do some task
}
Bur我在list.size()上得到了ConcurrentModificationException。
这是简单的java.util.List
Caused by: java.util.ConcurrentModificationException
at java.util.AbstractList$SubAbstractList.size(AbstractList.java:360)
at java.util.Collections$SynchronizedCollection.size(Collections.java:440)
如何解决呢?
完整的代码:
private List<Double> computeValue(@NonNull List<Double> list1, List<Double> list2) {
List<Double> computedList = new ArrayList<>();
for (int i = 0; i < list1.size(); i++) {
computedList.add(-((list1.get(i) + list2.get(i)) / 2));
}
return computedList;
}
最佳答案
使用ListIterator解决ConcurrentModificationException。在ListIterator中,可以在迭代时添加。
例如:
List<Double> list = new ArrayList<>();
list.add(2d);
list.add(3d);
list.add(4d);
ListIterator iterator = list.listIterator();
while (iterator.hasNext()){
double val = (double) iterator.next();
iterator.add(val + val/2);
}
System.out.println(list);
放出
[2.0, 3.0, 3.0, 4.5, 4.0, 6.0]
关于java - 列表大小的ConcurrentModificationException(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44541861/