[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 11751] Re: 本日の議事録
高橋(智)です。
nemo_kaz wrote:
snip
> hashtableはjavaも昔は最初の16byteで作ったが、今は直っていて、同じHashが
> 固まりででてくることはない。
snip
JDK1.0.2の頃はどうだったか忘れましたが、JDK1.1.8では以下のように
最初の16byteだけというわけでは無さそうです。16byte以上でも衝突する
可能性は"幾分か"高いと思われます。
[JDK1.1.8]
-----------------------------------------------------
public int hashCode() {
int h = 0;
int off = offset;
char val[] = value;
int len = count;
if (len < 16) {
for (int i = len ; i > 0; i--) {
h = (h * 37) + val[off++];
}
}
else {
// only sample some characters
int skip = len / 8;
for (int i = len ; i > 0; i -= skip, off += skip) {
h = (h * 39) + val[off];
}
}
return h;
}
-----------------------------------------------------
[JDK1.3〜]
-----------------------------------------------------
public int hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;
int len = count;
for (int i = 0; i < len; i++)
h = 31*h + val[off++];
hash = h;
}
return h;
}
-----------------------------------------------------
--
高橋智宏
Java読書会( http://www.javareading.com/bof/ )