我已经覆盖了对象类的 equals ,以便每次将该类的对象添加到数组列表时发生重复时,都会弹出一个对话框。但这会随着数组列表的remove() 弹出。有没有办法可以根据使用 equals 的方法来设置此条件?就像两个不同的等于,或者也许使用另一个数组列表方法,可以让您指定要使用哪个等于?
编辑: 抱歉我的问题很不清楚。 这是我重写的 equals 和 hashcode 方法:
@Override
public boolean equals(Object s) {
if(!(s instanceof Car)) {
return false;
}
Car s2 = (Car)s;
if(this.name.equals(s2.name) && this.ride.equals(s2.ride)){
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle("Delete Item");
alert.setHeaderText(
"Are you sure?");
alert.showAndWait();
return true;
}
return false;
}
@Override
public int hashCode(){
int hashC;
hashC = name.hashCode();
hashC *= ride.hashCode();
return hashC;
}
至于其余的,我使用 HashSet 自动删除重复项。
最佳答案
不要让 equals
做任何超出 contract 的事情。说应该做。相反,请检查 indexOf
查看该元素是否已存在于 List
中。
if (list.indexOf(object) != -1) {
dialog.show();
} else {
list.add(object);
}
但是,如果您不希望集合包含任何重复项并且不关心元素的顺序,则应该使用 HashSet
而不是列表
。这将通过检查 equals
自动排除重复项,并在 add
上返回 false。存在重复项时的方法。您将需要覆盖 hashCode
也可以在您的对象上使用方法。
if (!set.add(object)) {
dialog.show();
}
关于java - 重写等于仅一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39824776/