public class Contact {
public static void main(String[] args) {
MobilePhone mobilePhone = new MobilePhone("sdfjds");
System.out.println(mobilePhone.addNewContact((createContact("Burak", "3445"))));
System.out.println(mobilePhone.addNewContact((createContact("Burak", "3445"))));
}
private String name;
private String phoneNumber;
public Contact(String name, String phoneNumber) {
this.name = name;
this.phoneNumber = phoneNumber;
}
public String getName() {
return name;
}
public String getPhoneNumber() {
return phoneNumber;
}
public static Contact createContact(String name, String phoneNumber) {
return new Contact(name, phoneNumber);
}
}
import java.util.ArrayList;
public class MobilePhone {
private String myNumber;
private ArrayList<Contact> myContacts;
public MobilePhone(String myNumber) {
this.myNumber = myNumber;
this.myContacts = new ArrayList<Contact>();
}
public boolean addNewContact(Contact contact) {
if (!myContacts.contains(contact)) {
myContacts.add(contact);
return true;
} else {
return false;
}
}
public boolean updateContact(Contact oldContact, Contact newContact) {
if (myContacts.contains(oldContact)) {
myContacts.set(myContacts.indexOf(oldContact), newContact);
return true;
} else {
return false;
}
}
public boolean removeContact(Contact contact) {
if (myContacts.contains(contact)) {
myContacts.remove(myContacts.indexOf(contact));
return true;
} else {
return false;
}
}
private int findContact(Contact contact) {
return myContacts.indexOf(contact);
}
private int findContact(String contactName) {
for (Contact contacts : myContacts) {
if (contacts.getName().equals(contactName)) {
return 1;
}
}
return -1;
}
public Contact queryContact(String contact) {
for (Contact contacts : myContacts) {
if (contacts.getName().equals(contact)) {
return contacts;
}
}
return null;
}
public void printContacts() {
System.out.println("Contact List:");
int number = 1;
for (Contact contacts : myContacts) {
System.out.println(number + ". " + contacts.getName() + " -> " + contacts.getPhoneNumber());
}
}
}
我期望 contains 方法在第一次输入时返回 true,当我再次尝试完全相同的操作时返回 false。但似乎创建了一个新对象,当我调用 Array List Contains 时,它总是会有所不同,因为每次创建新联系人时分配的 id 都是不同的?这似乎有点不明确,所以我想问一下。如果我不能这样使用 contains 有什么用?您能否告诉我有关在不更改代码的情况下使用数组列表包含的见解。我可以更改代码并使其工作,但我想使用数组列表 (.) 包含。
List
API 指定 contains
方法使用 equals(Object)
方法来确定对象是否在列表中。并且ArrayList
符合本合同。
但就您而言,您尚未在
equals(Object)
类中声明 Contact
方法。这意味着 Contact
继承了 equals(Object)
的 Object
方法,基于引用相等性进行测试。
解决方案:适当地覆盖
equals(Object)
,contains
将按照你想要的方式工作。我将让您找出正确的实施方法equals
。请注意,您不应假设参数始终是 Contact
。