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