gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:46:14 25 4
gpt4 key购买 nike

我有一个名为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com