你好,我发现一个和集合相关的问题。
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());
}
}
Hashset的大小为4,但它不应该是1吗?因为equals方法已经实现了,HashSet是否可以包含具有相同名称的多个Person对象?
由于hashCode方法没有被覆盖,所有的Person对象的哈希码都相同吗?
Object.hashCode()
部分说明了 通常通过将对象的内部地址转换为整数来实现。 - Elliott FrischHashSet
时,您已经正确编码了equals()/ hashCode()
;) - fge