Java 为什么我的哈希集中有重复的数据?
我试图用Java操作HashSet。我看到,通常情况下,HashSet中不可能存在重复项 这是我的密码Java 为什么我的哈希集中有重复的数据?,java,hashmap,set,hashset,Java,Hashmap,Set,Hashset,我试图用Java操作HashSet。我看到,通常情况下,HashSet中不可能存在重复项 这是我的密码 public class A{ private int elem; public A(int elem) { this.elem = elem; } } 在另一节课上 import java.util.HashSet; import java.util.Iterator; public class B{ private Strin
public class A{
private int elem;
public A(int elem) {
this.elem = elem;
}
}
在另一节课上
import java.util.HashSet;
import java.util.Iterator;
public class B{
private String name;
private HashSet<A> listeA;
public static void main(String[] args){
HashSet<A> a = new HashSet<A>();
B s = new B("B",a);
A l1 = new A(15);
A l2 = new A(14);
A l3 = new A(15);
a.add(l1);
a.add(l2);
a.add(l3);
s.displayHashset();
}
我不明白我的哈希集中怎么能接受第二个15
谢谢你的回复 您没有重写equals和hashcode。HashSet基于equals方法检查一个对象是否等于另一个对象。此外,为了不进行太多比较,它将具有相同哈希代码的对象分组在一起
请注意,每当重写hashCode方法时,通常都需要重写该方法,以便维护hashCode方法的一般约定,即相等的对象必须具有相等的哈希代码
equals和hashcode的生成版本:
public class A{
private int elem;
public A(int elem) {
this.elem = elem;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
A a = (A) o;
return elem == a.elem;
}
@Override
public int hashCode() {
return Objects.hash(elem);
}
}
您没有重写equals和hashcode。HashSet基于equals方法检查一个对象是否等于另一个对象。此外,为了不进行太多比较,它将具有相同哈希代码的对象分组在一起
请注意,每当重写hashCode方法时,通常都需要重写该方法,以便维护hashCode方法的一般约定,即相等的对象必须具有相等的哈希代码
equals和hashcode的生成版本:
public class A{
private int elem;
public A(int elem) {
this.elem = elem;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
A a = (A) o;
return elem == a.elem;
}
@Override
public int hashCode() {
return Objects.hash(elem);
}
}
HashSet使用hashCode和equals方法定义重复项。当您实现这些方法时,您会告诉HashSet类的重复实例是什么意思。从Object类继承的hashCode和equals的默认实现将类的每个实例视为唯一的对象,因此HashSet允许多个实例的属性值相同HashSet使用hashCode和equals方法定义重复项。当您实现这些方法时,您会告诉HashSet类的重复实例是什么意思。从Object类继承的hashCode和equals的默认实现将类的每个实例视为唯一的对象,因此HashSet允许多个实例的属性值相同它们是不同的对象,只是具有相同的属性它们是不同的对象,只是回复时具有相同的属性,我看了这个但不明白,现在对我来说很清楚。谢谢你的回复,我看了这个但不明白,现在对我来说很清楚。谢谢你的回复,我看了这个但不明白,现在对我来说很清楚。谢谢你的回复,我看了这个但不明白,现在对我来说很清楚。