哈希集中包含相等对象的java
你好,我发现了一个与收藏有关的问题
public class Person {
private String name;
public Person(String name){
this.name=name;
}
public boolean equals(Object o){
if(!(o instanceof Person))return false;
Person p=(Person)o;
return p.name.equals(this.name);
}
public static void main(String[] args) {
HashSet<Person> hs=new HashSet<Person>();
hs.add(new Person("Hi"));
hs.add(new Person("Hi"));
hs.add(new Person("Hi"));
hs.add(new Person("Hi"));
System.out.println("Elements"+hs.size());
}
}
哈希集的大小为4。但它不需要是1吗?既然实现了equals方法,HashSet能否包含多个同名的Person对象
当hashcode方法未被覆盖时,所有Person对象是否都具有相同的hashcode
# 1 楼答案
.equals()
是不够的。你需要^{当你实施其中一项时,根据经验,一定要实施另一项
遵守合同;特别是,同一类的两个实例
.equals()
必须具有相同的.hashCode()
现在,正如它的名字所暗示的,一个
HashSet
依赖于。。。散列。在这种情况下,在.hashCode()
的结果上。根据结果,它会将您添加的对象插入到不同的哈希桶中由于你的对象都有不同的散列码,它们最终会出现在四个不同的桶中