13

Java 8は、多数のキーハッシュコードの衝突が発生した場合のパフォーマンスを向上させるために、文字列キーの代替ハッシュを提供しています。誰かがそれが何であり、それがどのように機能するかを説明できますか?

4

3 に答える 3

10

この質問への関連性を高めるために、JDK 8 から代替ハッシュが削除されました。以下を確認してください。

http://docs.oracle.com/javase/8/docs/technotes/guides/collections/changes8.html

http://openjdk.java.net/jeps/180

興味深いことに、ハッシュ バケット内のアイテム数が特定のしきい値を超えると、そのバケットはエントリのリンク リストの使用からバランス ツリーの使用に切り替わります。

HashMap の hash(Object key) 関数は、次のように改訂されました。String オブジェクトに対する特別な処理はありません。

static final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
于 2014-08-08T06:34:58.040 に答える
8

このメールから:core-lib-devs@openjkd

  • 新しいインターフェース Hashable32 が導入されました。
  • Hashable32 はメソッド hash32() を提供します
  • 文字列は Hashable32 および hash32() メソッドを実装します
  • HashMap などは文字列を認識し、hashCode() ではなく hash32() を呼び出します

コードのリビジョン:

于 2012-08-14T11:36:31.350 に答える
3

MurmurHash3への移行は DoS 攻撃を防げないことに注意して ください。

于 2013-08-09T13:40:13.280 に答える