java - 列表 size() 上的 ConcurrentModificationException

标签 java android arraylist

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

for (int i = 0; i < list.size(); i++) {
                //Do some task
            }

但是我在 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 - 列表 size() 上的 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44541861/

相关文章:

java - 如何将泛型类型 ArrayList 设为静态?

java - 将 csv 文件读入 HashMap<String, ArrayList<Integer>>

java - 如何从数组中获取 5 个数字的序列

java - DRL 规则确保每位员工一个月内夜类次数不超过 5 次

Java - ArrayList 和创建一个对象

android - 多个屏幕的图像按钮大小

java - 如何让用户在javafx中逐个窗口退出

android - PagerAdapter 中的 instantiateItem(ViewGroup, int) 和 ViewPager 中的 AddView 混淆

android - ndk-build 错误 prebuilt-library.mk :28: *** missing separator. 停止

java - ArrayList 和 toString