禁止HashSet允许JAVA中的重复对象

时间:2018-09-29 05:31:40

标签: java equals hashset hashcode

在主要

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。 什么在后端有效?

1 个答案:

答案 0 :(得分:4)

您的情况逆转了。如果两个学生的ID相同,则必须返回true

if(this.id == obj.id)
    return true;
else
    return false;

您没有在equals类(Object.equals)中覆盖ObjectequalsObject作为参数,而不是Student

这是您可以做到的方式。

@Override
public boolean equals(Object obj) {
    if (!(obj instanceof Student))
        return false;
    if (obj == this)
        return true;
    return this.id == ((Student) obj).id;
}