簡體   English   中英

檢查數組是否包含值,如果沒有,則將其添加到arraylist-並發修改異常-Java

[英]check if array contains values, if not then add to arraylist - Concurrent Modification Exception - Java

我正在將String name傳遞給方法,如果該name不在數組中,則將其添加。

我首先嘗試了此方法,但並發修改異常

List<String> people = new ArrayList<>();

public void addName(String name) {
    if (people.isEmpty()) {
        people.add(name);
    } else {
        for (String s : people) {
            if (s.equals(name)) {
                System.out.println("dont add");
            } else {
                people.add(name);
            }
        }
    }
}

在論壇上閱讀后,我了解到您必須使用迭代器來避免這種情況。 我嘗試了該問題並修復了Concurrent Modification Exception ,但是即使我聲明如果數組中存在它們也不添加它們,也將添加播放器,當我傳遞列表中已經存在的名稱時,我的確會得到此輸出“ name exist” ,但是它也會同時運行“已添加名稱”,所以不明白為什么會這樣

if (people.isEmpty()) {
    people.add(name);
} else {
    String name2 = null;
    for (Iterator<String> it = people.iterator(); it.hasNext(); ) {
        String element = it.next();
        if (element.equals(name)) {
            String message = "name exists";
            System.out.println(message);
            name2 = null;
        } else if (!element.equals(name)) {
            System.out.println("Name added");
            name2 = name;
        }
    }
    if (name2 != null) {
        people.add(name2);
    }
}

您可以通過以下方式簡單地做到這一點:

public void addName(String name) {
    if (!people.contains(name)) {
        people.add(name);
    }
}

聽起來您正在嘗試重新創造一套。

Set<String> names = new TreeSet<>(); // Or set of your choice
names.add("Joe"); // Set contents ["Joe"]
names.add("Bob"); // Set contents ["Joe", "Bob"];
names.add("Joe"); // Set contents ["Joe", "Bob"];

如果您想要打印線

if (names.add(name) {
  System.out.println("Added name " + name);
} else {
  System.out.println("Already added " + name);
}

我認為一旦發現名稱已經存在,就需要打破循環。 否則, name2可能會設置為null ,然后再次設置為非null值。

例如:

           for (Iterator<String> it = people.iterator(); it.hasNext(); ) {
                String element = it.next();
                if (element.equals(name)) {
                    String message = "name exists";
                    System.out.println(message);
                    name2 = null;
                    break;
                } else if(element.equals(name)==false) {
                    System.out.println("Name added");
                    name2 = name;
                }
            }

但是請查看contains因為這是一種更清潔的方法!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM