在JAVA中设置不正确

Gou*_*mar 0 java collections set hashcode hashset

我只是想从列表中删除重复的元素.为此,我写了一个POJO类Student:

class Student{

private String roll;
private String name;

public Student(String roll, String name) {
    this.roll = roll;
    this.name = name;
}
@Override
public boolean equals(Object obj) {
    Student st = (Student) obj;
    return st.getRoll().equals(roll);
}

public String getRoll() {
    return roll;
}
public void setRoll(String roll) {
    this.roll = roll;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
@Override
public String toString() {
    return roll ;
}

}
Run Code Online (Sandbox Code Playgroud)

测试类如下:

public class TestMain {
public static void main(String[] args) {

    List<Student> list = Arrays.asList(
            new Student("19", "goutam kumar singh"),
            new Student("20", "goutam kumar singh"),
            new Student("11", "goutam kumar singh"),
            new Student("19", "goutam kumar singh")
            );

    List<Student> arrayList = new CopyOnWriteArrayList<>(list);
    Set<Student> set = new HashSet<>();

    for(Student st : arrayList)
        set.add(st);
    System.out.println(set);
}
}
Run Code Online (Sandbox Code Playgroud)

但在输出中集合中的所有四个元素,但我期望只有三个元素作为第四个元素是重复的,必须删除.

我哪里错了?

Raz*_*zib 7

你也必须覆盖这个hashCode()方法.覆盖覆盖hashCode()方法的属性的equals()方法.

使用Collection它时,记住hashCode()equals()方法之间的契约是有用的-

1.如果两个对象相等,则它们必须具有相同的哈希码.
2.如果两个对象具有相同的哈希码,则它们可能相等也可能不相同.

有关更多信息,请访问此链接