禁止 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
) 中的 equals
。 equals
将 Object
作为参数而不是 Student
。
这里有一个方法可以做到。
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Student))
return false;
if (obj == this)
return true;
return this.id == ((Student) obj).id;
}
主要
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
) 中的 equals
。 equals
将 Object
作为参数而不是 Student
。
这里有一个方法可以做到。
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Student))
return false;
if (obj == this)
return true;
return this.id == ((Student) obj).id;
}