如何从 ArrayList<Class> 中删除对象?

时间:2021-07-13 15:38:31

标签: java arrays object arraylist

我正在尝试从 ArrayList 中删除对象 键入 Contact 类。我正在尝试从用户那里获取输入并希望 从 ArrayList 中删除该对象

public class Contacts {

private String name, phoneNumber;

public Contacts(){

}

public  Contacts(String name, String phoneNumber) {
    this.name = name;
    this.phoneNumber = phoneNumber;
}

public String getName() {
    return name;
}

public String getPhoneNumber() {
    return phoneNumber;
}

@Override
public  String toString() {
    return "Contacts{" +
            "name='" + name + '\'' +
            ", phoneNumber='" + phoneNumber + '\'' +
            '}';
}

public static Contacts createContact(String name, String phoneNumber) {
    return new Contacts(name, phoneNumber);
}
}

在这里,我尝试添加带有名称和编号的对象,然后打印它们,我想删除一个特定的对象。

public class Mobile {
ArrayList<Contacts> mycontacts;

public Mobile() {
    this.mycontacts = new ArrayList<Contacts>();
}

public void addContacts() {

    System.out.println("enter contact name");
    Scanner sc = new Scanner(System.in);
    String name = sc.nextLine();
    System.out.println("enter contact number");
    String number = sc.nextLine();

    Contacts contacts = new Contacts(name, number);

    mycontacts.add(contacts);
}

public void print() {
    for (Contacts contacts : mycontacts) {
        System.out.println(contacts.getName() + "->" + contacts.getPhoneNumber());

    }


}

public String findcontact() {
    Scanner scanner = new Scanner(System.in);
    System.out.println("enter contact name");
    String name = scanner.nextLine();
    System.out.println("enter phone number");
    String number = scanner.nextLine();
    Contacts contacts = new Contacts(name, number);
    int x = mycontacts.indexOf(contacts);
    return mycontacts.get(x).getName();
}


public void remove() {

    Scanner scanner = new Scanner(System.in);
    System.out.println("enter contact name");
    String name = scanner.nextLine();

    System.out.println("enter contact number");
    String number = scanner.nextLine();
    Contacts contacts = new Contacts(name, number);



    Iterator<Contacts> itr = mycontacts.iterator();
    while (itr.hasNext()){

        Contacts contacts1 = itr.next();
        System.out.println(contacts1);
        if (contacts1==contacts){
            itr.remove();
        }

    }
}
}

4 个答案:

答案 0 :(得分:0)

你需要在你的 Contacts 类上实现 equals 方法,就像这样

public boolean equals(Object other){
    if(other instanceof Contract){
       Contract otherC = (Contract)other;
       return this.name.equals(otherC.name) && this.phoneNumber.equals(otherC.phoneNumber);
    }
    return false;
}

答案 1 :(得分:0)

Java 不是我的强项,但我认为你可以这样解决它:

Iterator<Contacts> itr = mycontacts.iterator();
    while (itr.hasNext()){

        Contacts contacts1 = itr.next();
        System.out.println(contacts1);
        if (contacts1.getName()==contacts.getName() && contacts1.getPhoneNumber() == contacts.getPhoneNumber()){
            itr.remove();
        }

    }

或简化:

mycontacts.removeIf(i -> i.getName()==contacts.getName() && i.getPhoneNumber()==contacts.getPhoneNumber());

我认为在这个比较中发生的事情是:if (contacts1==contacts)

它们永远不会相等,因为它们是不同的对象,但它们的类变量具有相同的值。

https://www.baeldung.com/java-comparing-objects

<块引用>

这些对象的值不是 1。而是它们在堆栈中的内存地址不同,因为这两个对象都是使用 new 运算符创建的。

编辑:实际上,在我回答时出现了另一个答案,这是更好的。因为我想我给出了更多解释,所以我就不说了。

答案 2 :(得分:0)

有两种方法可以从 ArrayList 中删除元素:

remove(Object object)
remove(int index) 

因此,如果您使用 name 作为键,它可能类似于:

public void removeContact(String name) {
    for(contact : mycontacts) {
        if(contact.name == name) {
           mycontacts.remove(contact)
       } 
     } 
} 

答案 3 :(得分:0)

我尝试使用以下代码,它奏效了。感谢所有帮助过我的人。 :)

for (Contacts mycontact : mycontacts) {
        if (mycontact.getName().equals(name)) {
            System.out.println("removed contact"+mycontact.getName()+"->"+mycontact.getPhoneNumber());
            mycontacts.remove(mycontact);

        }
        else{
            System.out.println("error deleting contact");
        }
    }