有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在迭代时从ArrayList中删除对象,而不会出现“并发修改错误”

在我创建和管理联系人的项目中,当我从for循环的数组列表中删除一个对象时,会抛出一个并发修改异常(如javadoc中所述)

我的问题是,如何在不获得“并发修改异常”的情况下删除对象

我查看了类似的帖子,但找不到答案,有些帖子的代码很复杂,很多人问我为什么没有抛出异常。 This question didn't help me/this specific problem 你可以阅读上面的链接来帮助我(我是新来的)

我使用的是jdk 14,ide:intelliJ

我创建了管理联系人和获取输入的方法,但我只提供引发异常的方法

public class Main {

    private static ArrayList<Contact> contacts;
     contacts = new ArrayList<>();

     private static void deleteContact() {
            System.out.println("Please enter contact name: ");
            String name = scanner.next();
            if (name.equals("")){
                System.out.println("Please enter the name");
                deleteContact();
            }else{
                boolean doesExist = false;
    
                for(Contact c:contacts) {       //Error pointed on this line.
                    if (c.getName().equals(name)) {
                        doesExist = true;
                        contacts.remove(c);
                    }
                }
                if (!doesExist){
                    System.out.println("There is no such contact");
                }
            }
            showInitialOptions();
        }
}

来自“联系人”类的重要代码

public class Contact {
    private String name;
    private int number;
    private String email;
  
    public Contact(String name, int number, String email ) {
        this.name = name;
        this.number = number;
        this.email = email;
       ;
    }
  public String getName() {
        return name;
    }
}

共 (1) 个答案

  1. # 1 楼答案

    您可以使用Iterator来迭代ArrayList

    Iterator<Contact> it = contacts.iterator();
    while(it.hasNext()){
        Contact c = it.next();
        if(c.getName().equals(name)){
            doesExist = true;
            it.remove();
        }
    }