我有一个名为Record
的对象类,该对象类由Data
类对象的向量组成对象类Data
除了两个变量外什么也没有]
Object value; String name;
我重写
Record
类中的equals方法,如下所示:
public boolean equals(Object obj) { boolean check = true; for(int i=0; i<this.coloumnsOfData.size();i++) { System.out.println( ((Record) obj).coloumnsOfData.get(i).name + " OBJECT " + ((Record) obj).coloumnsOfData.get(i).value ); System.out.println( coloumnsOfData.get(i).name + " THIS " + coloumnsOfData.get(i).value ); if( !((((Record) obj).coloumnsOfData.get(i).name).equals(this.coloumnsOfData.get(i).name)) || !((((Record) obj).coloumnsOfData.get(i).value).equals(this.coloumnsOfData.get(i).value))) { check=false; } } return (obj instanceof Record && check); }
我按以下方式初始化HashSet:
Set<Record> answer= new HashSet<Record>()
并开始测试
Record r1 = new Record(); r1.coloumnsOfData.add(new Data(new Double( 1.5 ),"gpa")); r1.coloumnsOfData.add(new Data(new String("John"),"name")); r1.coloumnsOfData.add(new Data(new Integer( 2 ),"id")); Record r2 = new Record(); r2.coloumnsOfData.add(new Data(new Double( 1.5 ),"gpa")); r2.coloumnsOfData.add(new Data(new String("John"),"name")); r2.coloumnsOfData.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
任何帮助您理解问题所在的地方,我们将不胜感激。
我有一个称为Record的对象类,它由一个数据类的向量对象组成。对象类数据只有两个变量,对象值;字符串名称;我在...
[也尝试覆盖hashCode方法。它应该工作。您可以在此处找到说明:HashSet contains() method
HashSet依赖于相等对象的hashCode
个相等的约定。也就是说,如果a.equals(b)返回true,则a.hashCode()必须与b.hashCode()]相同。
您应该重写Record的hashCode()方法以在HashSet中使用它