假設我們有一個如下瑣碎類:我應該使用什麼作爲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