Java contains() 方法返回 False,即使重写的 equals() 返回 True

标签 java collections equals contains hashset

我有一个名为 Record 的类,它由 Data 类对象的 vector 组成。

Data只有两个字段:

Object value;
String name;

我重写了 Record 类中的 equals 方法,如下所示:

public boolean equals(Object obj) {
    boolean check = true;
    for (int i = 0; i < this.columnsOfData.size();i++) {
        System.out.println( ((Record) obj).columnsOfData.get(i).name + " OBJECT " + ((Record) obj).columnsOfData.get(i).value );
        System.out.println( columnsOfData.get(i).name + " THIS " + columnsOfData.get(i).value );
        if( !((((Record) obj).columnsOfData.get(i).name).equals(this.columnsOfData.get(i).name))   || !((((Record) obj).columnsOfData.get(i).value).equals(this.columnsOfData.get(i).value))) {
            check = false;
        }
    }
    
    return (obj instanceof Record && check);
}

我初始化HashSet如下:

Set<Record> answer = new HashSet<Record>()

并开始测试

        Record r1 = new Record();
        r1.columnsOfData.add(new Data(new Double( 1.5 ),"gpa"));
        r1.columnsOfData.add(new Data(new String("John"),"name"));
        r1.columnsOfData.add(new Data(new Integer( 2 ),"id"));
        
        Record r2 = new Record();
        r2.columnsOfData.add(new Data(new Double( 1.5 ),"gpa"));
        r2.columnsOfData.add(new Data(new String("John"),"name"));
        r2.columnsOfData.add(new Data(new Integer( 2 ),"id"));

        System.out.println(r1.equals(r2)); //RETURNS TRUE
        answer.add(r1);
        System.out.println(answer.contains(r2)); //RETURNS FALSE

任何帮助理解问题所在的帮助都将不胜感激。

最佳答案

尝试覆盖 hashCode 方法。它应该有效。 您可以在这里找到解释: HashSet contains() method

关于Java contains() 方法返回 False,即使重写的 equals() 返回 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61066964/

相关文章:

java - 在 Java Collections Map<Key,?> 中 "?"指的是什么?

recursion - 普通口齿不清 : Recursive "is-equal" function - results are incorrect

java - 我可以这样做吗 - if(token[0].equals( ("MOVE")| ("NOT")| ("AND"))

java - 合并单元格时设置单元格值不起作用

java - 数据库连接复用

java - 播放声音的问题非常小

openshift中的Java RMI端口绑定(bind)错误

arrays - 对于集合类型,为什么remove方法有返回值而insert没有返回值

java - 根据字符串搜索 Java 集合

java - 在Java中为具有循环引用的对象实现equals和hashCode