如果我只有对象的哈希码,而不是对象本身,我可以检查对象是否在HashSet
中吗?
答案 0 :(得分:9)
您不能,因为hashCode
仅用于定位HashSet
中存储对象的bin。同一个bin中可能有多个元素,HashSet
使用equals
来确定搜索到的元素是否存在于hashCode
映射到的bin中。
bin可能包含多个具有相同hashCode
的元素,因此只知道hashCode
是不够的。
答案 1 :(得分:3)
您可以创建一个特殊对象,类似这样的
int hashCode = 1; // your
new Object() {
@Override
public boolean equals(Object obj) {
return true;
}
@Override
public int hashCode() {
return hashCode;
}
};
答案 2 :(得分:1)
不,你不能。在散列集合中查找对象时需要equals和hashcode。 hashcode方法告诉哪个桶找到对象,equals方法在桶中找到对象。
一个现实世界的例子是一个有很多人的房子。如果你告诉我在某个房子里找人,我会问你两个问题:
这里(1)将通过哈希码回答,(2)将通过等号方法回答。
答案 3 :(得分:1)
hashCode
不是唯一标识属性,所以没有。
答案 4 :(得分:1)
不,因为2个对象可以具有相同的哈希码。 Set
(或Map
中的键)中的对象的唯一性会针对hashCode()
和 equals()
进行检查。
答案 5 :(得分:0)
所有对象都有方法hashCode(),由HashSet,HashMap,ecc调用。
您可以覆盖此方法以定义自己的逻辑
@Override
public int hashCode() {
return <<MY CODE HERE>>;
}
或者更简单,迭代你的HashSet并检查hashCode()值
int myHash = 123;
for(Object o:mySet){
if(myHash == o.hashCode()){
// do something..
}
}