[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/ )