Jon Skeetの回答は、2つのシナリオを適切に処理します(null
値を持つマップとないマップnull
は、効率的な方法でます。
エントリー数と効率性について、何か付け加えたいと思います。
私は、例えば1.000エントリのHashMapを持っていて、効率を改善しようとしています。HashMapが非常に頻繁にアクセスされる場合、すべてのアクセスでキーの存在を確認すると、大きなオーバーヘッドが発生します。
1.000エントリのマップは、巨大なマップではありません。
同様に5.000または10.000エントリのマップ。
Map
このような次元で高速に検索できるように設計されています。
今、それは hashCode()
は、マップキーが適切に分散されます。
Integer
キータイプとして使用できる場合は、それを実行してください。一意の値では衝突が発生しないため、
そのhashCode()
方法は非常に効率的int
です。
public final class Integer extends Number implements Comparable<Integer> {
...
@Override
public int hashCode() {
return Integer.hashCode(value);
}
public static int hashCode(int value) {
return value;
}
...
}
キーについてはString
、たとえばでよく使用される別の組み込み型を使用するMap
必要がある場合、いくつかの衝突が発生する可能性がありますが、のオブジェクトの数が1,000から数千Map
になると、String.hashCode()
メソッド良い分布を提供します。
カスタムタイプを使用する場合は、オーバーライドhashCode()
してequals()
正しく、全体がhashCode()
公平な分布を提供するようにしてください。
参考資料9の項目を参考にしてくださいJava Effective
。
これがその方法の詳細な投稿です。