java - 如何修复 java.util.ConcurrentModificationException?

标签 java concurrentmodification

我的代码的目的是让用户输入汽车名称,然后搜索数组列表并找到与用户输入的内容相匹配的对象。每当我运行代码时,都会收到 java.util.ConcurrentModificationException 错误。非常感谢对此错误含义的解释以及修复它的建议:)

public static void arrayList()
{
    //Declarations
    ArrayList<String> list = new ArrayList<String> ();             
    ListIterator<String> iterator = list.listIterator();
    list.add ("Aston Martin");
    list.add ("Ferrari"); 

    Scanner scan = new Scanner(System.in); 
    String car = new String();
    String search = new String();


    //Prompts user to enter car name
    System.out.println ("Enter car name: ");    
    car = scan.nextLine();  

    //Searches array list for car
    while (iterator.hasNext())
    {
        search = iterator.next();           
        if (search.equalsIgnoreCase (car))
        {
            System.out.println (search);
        }
    }                   
}

最佳答案

相关集合的 Javadocs 和 ConcurrentModificationException很清楚:

This exception may be thrown by methods that have detected concurrent modification of an object when such modification is not permissible.

您开始对 list 进行迭代,但随后对其进行了修改并返回到迭代器。

在即将使用迭代器之前不要打开它。更好的是,由于您不需要访问 remove(),只需使用增强的 for 循环即可:

for(String item: list) {
    if(item.equalsIgnoreCase (car)) {
        System.out.println(item);
    }
}

关于java - 如何修复 java.util.ConcurrentModificationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29025234/

相关文章:

java - 我忘记停止 GUI 程序并再次运行它。现在我无法在不杀死 eclipse 的情况下关闭第一个程序

java - 如何自定义 DataNucleus JDO 继承层次结构中使用的外键名称?

java - ArrayList 到数组

java - 获取一个 ConcurrentModificationException 聊天程序

java - 我得到以下异常 : "java.util.ConcurrentModificationException"

java - spring中的实例变量在多线程环境中导致问题

java - Hadoop副本处理

postgresql - postgres UPSERT 完全原子/线程安全吗?

mysql - 如果在 MySQL 中同时运行,我的 UPDATE 语句可以工作吗?

java - 使用迭代器删除条目时出现 ConcurrentModificationException