在主要
Student st=new Student(1,"snack");
Student st1=new Student(2,"jack");
Student st2=new Student(2,"jack");
Set<Student> hs=new HashSet<Student>();
hs.add(st);
hs.add(st1);
hs.add(st2);
System.out.println(hs);
O / P:[1个小吃,2个插孔,2个插孔]
在学生中
@Override
public int hashCode() {
// TODO Auto-generated method stub
return this.id;
}
@Override
public boolean equals(Student obj) {
if(this.id==obj.id)
return false;
else
return true;
我的目标是不允许具有相同id..name的学生相同。请提供详细信息,HashSet如何检查重复的元素? 我所知道的是,HashSet基于hashcode()和equals()方法返回true或false。 什么在后端有效?
答案 0 :(得分:4)
您的情况逆转了。如果两个学生的ID相同,则必须返回true
。
if(this.id == obj.id)
return true;
else
return false;
您没有在equals
类(Object.equals
)中覆盖Object
。 equals
以Object
作为参数,而不是Student
。
这是您可以做到的方式。
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Student))
return false;
if (obj == this)
return true;
return this.id == ((Student) obj).id;
}