在JAVA中设置工作不正确
我只想从列表中删除重复的元素。为此,我编写了一个POJO类在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
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()
方法…?请参见