我将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 exists”列表,但它然后运行“添加名称”,所以不明白为什么会发生这种情况
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);
}
}
答案 0 :(得分:3)
您可以通过以下方式完成:
public void addName(String name) {
if (!people.contains(name)) {
people.add(name);
}
}
答案 1 :(得分:1)
听起来你正试图重新发明一套。
List<Country> myList;
如果您想要印刷品
Double distance
答案 2 :(得分:0)
我认为一旦你发现这个名字已经存在,就需要突破你的循环。否则,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;
break;
} else if(element.equals(name)==false) {
System.out.println("Name added");
name2 = name;
}
}
但请查看contains
,因为这是一种更清洁的方法!