假设我们有一个如下琐碎类:我应该使用什么作为null的哈希码?
public class Foo {
public Integer bar;
}
我们希望能够建立其一个“好” hashCode
方法。举例来说,我认为“好”是指在“真实生活”的情况下发生散列码冲突的可能性很小。
在“现实生活”这样一类我会合理地期望Foo
s的bar
设置为null
或0
。我甚至会争辩说,这两个可能是最常见的值。
但让我们来看看什么样的Eclipse,例如,产生:
public class Foo {
public Integer bar;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((bar == null) ? 0 : bar.hashCode());
return result;
}
}
而且它不只是Eclipse的,好像用0
作为hashCode
为null
是正常的做法。
但是这会产生相同的散列码null
和0
,不是吗?因为我假设null
和0
可能是最常见的情况 - 这导致更高的collission可能性。
所以这里来了我的问题。 null
的值是多少hashCode
?
a负值? – 2014-12-03 10:13:38
@SarthakMittal哪一个? – lexicore 2014-12-03 10:43:03
你的bar.hashCode()可以返回负值吗?如果不是,那么任何负值就足够了否则我会建议使用Integer.MIN_VALUE :) – 2014-12-03 11:16:57