Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JAVA中设置工作不正确_Java_Collections_Set_Hashcode_Hashset - Fatal编程技术网

在JAVA中设置工作不正确

在JAVA中设置工作不正确,java,collections,set,hashcode,hashset,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 s

我只想从列表中删除重复的元素。为此,我编写了一个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 ;
}

}
和一个测试类,如下所示:

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);
}
}
公共类TestMain{
公共静态void main(字符串[]args){
List=Arrays.asList(
新生(“19”,“古塔姆·库马尔·辛格”),
新生(“20”,“古塔姆·库马尔·辛格”),
新生(“11”,“goutam kumar singh”),
新生(“19”,“古塔姆·库马尔·辛格”)
);
List arrayList=新的CopyOnWriteArrayList(列表);
Set=newhashset();
for(学生名单:arrayList)
集合。添加(st);
系统输出打印项次(套);
}
}
但在输出中,集合中的所有四个元素,但我预期只有三个元素,因为第四个元素是重复的,必须删除


哪里出错了?

您也必须重写
hashCode()
方法。为您重写其
equals()
方法的那些属性重写
hashCode()
方法

在使用
集合
时,记住
hashCode()
equals()
方法-

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


有关更多信息,您可以访问此

HashSet将元素作为键存储在HashMap的内部。因此,它将使用您的学生对象作为该映射的键,并使用每个对象的哈希代码。由于您没有提供此方法的实现
hashCode()
,因此将使用对象中的默认实现,并且您的每个学生将拥有不同的哈希代码


您必须在类中扩展此方法,并注意equals hashCode契约。如果两个对象相等,则它们必须具有相同的哈希代码(反之亦然)。有关更多详细信息,请参见此

为什么要重写
equals()
方法…?请参见