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。
これがその方法の詳細な投稿です。