java - 删除 ArrayList 中的元素时出现 ConcurrentModificationException [使用 iterator.remove()]

标签 java exception arraylist concurrentmodification

我知道我们不应该在迭代期间修改 ArrayList。

但是我使用 Iterator 迭代列表并使用 iterator.remove() 删除元素,但仍然导致 ConcurrentModification 异常。

我的程序不是多线程的。

我有很多数组列表[类包含它,我正在处理许多对象数组]

for(int i=0;i<obj.length;i++)
{
    if(k==i) continue;

    it = obj[i].arraylist.iterator();

    while(it.hasNext()){
    value = it.next();

      if(condn)  {
       it.remove();
       obj[k].arraylist.add(value);
       //k and i are not same 

      }

    }

}

最佳答案

"Note that Iterator.remove is the only safe way to modify a collection during iteration; the behavior is unspecified if the underlying collection is modified in any other way while the iteration is in progress."

您可以在迭代期间删除对象,但不能添加新对象,这就是您收到 ConcurrentModificationException 的原因。

http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html

编辑: 您还可以检查:

if(k==i || obj[i].arraylist == obj[k].arraylist) continue;

关于java - 删除 ArrayList 中的元素时出现 ConcurrentModificationException [使用 iterator.remove()],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18629430/

相关文章:

java - Spring 批处理 3,IBM JVM (BackToBackPatternClassifier) 上的配置加载时出错

java - Jackrabbit 2.6.0 与 Java 6 的兼容性

Java:使用反射调用方法时如何获得完整的失败跟踪?

ArrayList 的 Java 问题

java - 如何初始化存储在另一个 Activity 的 Pojo 类中的 arraylist?

java - 为什么我的应用程序不从 fragment 中打开新的 Activity?

java - 如何从新线程中取出变量?

c++ - 在代码中捕获异常

objective-c - 如果 [super init] 返回 nil 为什么不抛出异常?

java - 如何使用 Java 将值存储为列表而不重复