仅覆盖一种方法的等于

时间:2016-10-03 04:51:12

标签: java override equals

我已经覆盖了一个对象类的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自动删除重复项。

1 个答案:

答案 0 :(得分:1)

不要让equals做任何比contract所说的更多的事情。相反,请使用indexOf检查以查看该元素是否已存在于List中。

if (list.indexOf(object) != -1) {
    dialog.show();
} else {
    list.add(object);
}

但是,如果您不希望集合包含任何重复项,并且您不关心元素的顺序,则应使用HashSet而不是List。这将通过选中equals自动阻止重复,并且当存在重复时,将在add方法上返回false。您还需要覆盖对象上的hashCode方法。

if (!set.add(object)) {
    dialog.show();
}