【问题标题】:java 2d arraylist edit inside loopjava 2d arraylist在循环内编辑
【发布时间】:2015-10-22 21:33:41
【问题描述】:

我有一个存储对象的 2d ArrayList,我想检查某个对象是否存在于任何行中,如果不存在则添加一个新行,并在以后的检查中搜索该对象。例如。

ArrayList<List<Object>> list = new ArrayList<>();
for(List<Object> o : list) {
    if(!o.contains(object){
        ArrayList<Object> newList = new ArrayList<>();
        newList.add(object);
        list.add(newList);
    }
}

这给了我一个“ConcurrentModificationException”,但我找不到其他方法。

提前致谢。

【问题讨论】:

    标签: java search arraylist 2d concurrentmodification


    【解决方案1】:

    list.add(newList);这条线应该在你的 for 循环之外。您正在尝试在对其进行迭代时修改您的列表。只需在 for 循环中继续向 newList 添加元素即可。添加行 list.add(newList);在 for 循环之后。

    【讨论】:

      【解决方案2】:

      在迭代列表项时不能更改列表。

      你可以做的是:

      ArrayList<List<Object>> list = new ArrayList<>(); // in practice this would not be an empty list, but it would, as in your example, contain all items
      ArrayList<List<Object>> newRows = new ArrayList<>();
      for(List<Object> o : list) {
          if(!o.contains(object){
              ArrayList<Object> newList = new ArrayList<>();
              newList.add(object);
              newRows.add(newList);
          }
      }
      list.addAll(newRows);
      

      【讨论】:

      • 我遇到的问题是,如果将新行添加到列表中,我希望它也可以遍历新行,以确保我没有任何重复
      【解决方案3】:

      你必须替换:

      for(List o : list) {

      与:

      for(int i = 0; i

      当你这样做时要小心处理你如何修改列表。在这种情况下应该没有问题。

      【讨论】:

        猜你喜欢
        • 2018-10-15
        • 2017-01-15
        • 1970-01-01
        • 2020-06-15
        • 2023-03-19
        • 2019-07-26
        • 2016-04-25
        • 2012-11-07
        • 2015-12-21
        相关资源
        最近更新 更多