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

Prohibit HashSet to allow duplicate object in JAVA

主要

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;

我的objective是不允许id..name相同的学生可以相同。请详细说明 HashSet 如何检查哪个元素是重复的? 我所知道的 HashSet returns true 或 false 基于 hashcode() 和 equals() 方法。 什么在后端起作用?

你把条件颠倒了。如果两个学生有相同的id,你必须return true

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

您没有覆盖 Object class(Object.equals) 中的 equalsequalsObject 作为参数而不是 Student

这里有一个方法可以做到。

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