ハッシュ(キー)の役割

問題

今日の質問:ObjectクラスのhashCode()関数を使用してオブジェクトをハッシュテーブルのint値にマッピングし、このint値に基づいてハッシュ値を計算して、ハッシュテーブル内での位置を決定することがわかっています。 、Hashtableで、彼がこれをどのように実行したかを確認できます。

int hash = key.hashCode();
intインデックス=(ハッシュ&0x7FFFFFFF)%tab.length;

しかしHashMapでは

static final int hash(Object key){
int h;
return(key == null)?0:(h = key.hashCode())^(h >>> 16);
}
putVal(hash(key)、key、value、false、evict)
tab [i =(n-1)&hash]

彼が最初にハッシュ(キー)関数を呼び出してから処理したことがわかりますが、今日の質問は、この関数がハッシュコードを前処理するために何をするかです。
ps:ヌルポインターに答えないでください。これは、この質問が求めているものではありません。

答え

この関数は非常に単純です。つまり、ハッシュコードの上位ビットと下位ビットを使用してXOR演算を実行するので、彼の役割は何ですか。

この問題は、HashMapのパフォーマンスから始まります。HashMapの検索と追加のパフォーマンスは、現在のハッシュ値に対応するリンクリストの長さに完全に関連しており、リンクリストの長さは、現在のHashMapに格納されているデータのハッシュ値の数とHashMapのハッシュ値です。ハッシュ(キー)をタブ長(2の指数でなければならない)で除算した残りの部分が使用されます。これはハッシュ(キー)の低次数であるため、このメソッドは高次とステータスを使用してXOR演算を実行し、低次を増加できます。順不同、ハッシュ値が等しい可能性を減らし、HashMapのパフォーマンスを向上させます。

19件の元の記事を公開しました 賞賛されました8 訪問4040

おすすめ

転載: blog.csdn.net/u014068277/article/details/103951235