ConcurrentModificationException

ConcurrentModificationException

我正在尝试对主线程中列表的每个值进行一些计算,如下所示

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/

10-13 09:08