java - 重写等于仅一种方法

标签 java overriding 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 自动删除重复项。

最佳答案

不要让 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/

相关文章:

java - Java中如何快速判断一个方法是否被重写

java - 自定义对象作为映射键

c# - 覆盖可变对象的 GetHashCode?

c# - C#中从基类调用重写的方法

java - 找不到类 : class java. util.HashMap 的消息正文编写器

java - 如何从匿名内部类更改外部变量?

java - 将文本文件读入二维数组?

php - Magento : How to override resource file?

sql - MYSQL 中的单个等于

java - C++ 和 Java 应用程序之间的 NamedPipe 交互进程