从Java Arraylist中删除
我做这个已经有一段时间了,不知道如何从Arraylist中删除 这是我的删除方法:从Java Arraylist中删除,java,Java,我做这个已经有一段时间了,不知道如何从Arraylist中删除 这是我的删除方法: static List<AddressInfo> contacts = new ArrayList<>(); private static void deleteContact() { //get name of contact to delete System.out.println("Which contact would you like to de
static List<AddressInfo> contacts = new ArrayList<>();
private static void deleteContact() {
//get name of contact to delete
System.out.println("Which contact would you like to delete?");
System.out.println("Enter the contacts first name:");
String nameToFind = scanner.nextLine();
//loop through array list to find name that matches entry
int matches = 0;
for(AddressInfo person : contacts) {
if(person.getName().equals(nameToFind)) {
contacts.remove(person);
matches++;
}
}
if(matches<=0) {
System.out.println("There are no contacts found with this name.\n");
}
showMainMenu();
}
姓名、姓氏、电话号码和电子邮件有getter和setter方法
问题:我的删除方法不起作用。我以为调用.remove
会删除我搜索的联系人?我发现了其他问题,并尝试了所有建议,但我无法让删除工作。我有添加、编辑、查找和显示方法,这些方法非常有效。感谢您的帮助
编辑
这是显示的错误异常(使用NetBeans)
问题是在遍历ArrayList时无法修改它。是否覆盖了
equals()
和hashCode()
方法?@GBlodgett不需要,因为它是正在比较的字符串对象。代码应该会导致ConcurrentModificationException,尽管remove在使用增强的for循环进行迭代时会修改基础集合,但这当然是不允许的。@GBlodgett No,在这种情况下,不需要重写equals或hashCode,因为正在使用应该从集合中移除的确切对象调用remove。它需要做一些事情,比如contacts.remove(newaddressinfo(nameToFind));假设这样的构造函数。必须使用迭代器来更改集合迭代器迭代器=contacts.Iterator();while(iterator.hasNext()){AddressInfo person=iterator.next();if(person.getName().equals(nameToFind()){iterator.remove();}}这个问题是一个dup。有关解决方案,请参阅。如果为true,则不会激发解决方案。线程“main”中出现异常java.util.ConcurrentModificationException根本原因此异常就是我提到的异常。因为用户在遍历列表时正在从列表中删除该项。是的,但您的答案非常肤浅,更像是一篇评论啊..明白了..我是新加入社区的人,我没有想到这一点。我看到了问题,所以发布了答案。下一步会注意的输入法
AddressInfo(String name, String surname, String phoneNumber, String email) {
this.name = name;
this.surname = surname;
this.phoneNumber = phoneNumber;
this.email = email;
id++;
}
String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at addressbook.AddressBook.deleteContact(AddressBook.java:106)
at addressbook.AddressBook.showMainMenu(AddressBook.java:203)
at addressbook.AddressBook.addContact(AddressBook.java:95)
at addressbook.AddressBook.showMainMenu(AddressBook.java:200)
at addressbook.AddressBook.main(AddressBook.java:17)
C:\Users\Andre\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 10 seconds)