我正在尝试对主线程中列表的每个值进行一些计算,如下所示
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;
}
答案 0 :(得分:0)
使用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);
Out put
[2.0, 3.0, 3.0, 4.5, 4.0, 6.0]
答案 1 :(得分:0)
我不确定是什么问题,但是通过检查for循环之外的大小来解决它。无论如何,谢谢你的回复
int listSize = list.size();
for (int i = 0; i < listSize; i++) {
//Do some task
}