如果元素在 java 中尚不存在,请添加该元素



我已经创建了这个方法,它应该只在电话号码不存在的情况下才将其添加到数组列表中。

private ArrayList<AlbanianPhoneNumber> phoneNumbers;
public void addPhoneNumber (AlbanianPhoneNumber newPhoneNumber) {

if(phoneNumbers.contains(newPhoneNumber)) {
//number already exists
}
else {
phoneNumbers.add(newPhoneNumber);
}
}

在main方法中,我添加了2个相同的电话号码,并且它们都在控制台中打印,这是不应该发生的,因为应该只打印其中一个。我怎样才能修好它?

person.addPhoneNumber(new AlbanianPhoneNumber(69,6956416));
person.addPhoneNumber(new AlbanianPhoneNumber(69,6956416));
System.out.println(person.getPhoneNumbers().toString());

//注意:AlbanianPhoneNumber类使用2个字段构造一个电话号码,第一个字段表示运营商号码,第二个字段表示用户号码。

你应该重写你的类AlbanianPhoneNumber的equals和hashCode方法。

如果你看到ArrayList类的contains方法的源代码,它基于equals方法,并且默认的equals方法检查引用对象而不是值。

@Override
public boolean equals(Object obj) {
return (this == obj);
}

您需要重写AlbanianPhoneNumber中默认的equals()实现:

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AlbanianPhoneNumber that = (AlbanianPhoneNumber) o;
return operator == that.operator && subscriberNumber == that.subscriberNumber;
}

另外,如果您使用Set(如HashSet),则不需要检查该元素是否存在于集合中。

最新更新