Java 8は、多数のキーハッシュコードの衝突が発生した場合のパフォーマンスを向上させるために、文字列キーの代替ハッシュを提供しています。誰かがそれが何であり、それがどのように機能するかを説明できますか?
質問する
4218 次
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() を呼び出します
コードのリビジョン:
- Murmur3 : https://code.google.com/p/smhasher/wiki/MurmurHash3
- althashing "7" webrev : http://cr.openjdk.java.net/~mduigou/althashing7/8/webrev/
- althashing "8" webrev : http://cr.openjdk.java.net/~mduigou/althashing8/8/webrev/
于 2012-08-14T11:36:31.350 に答える
3
MurmurHash3への移行は DoS 攻撃を防げないことに注意して ください。
于 2013-08-09T13:40:13.280 に答える