以下のリンクから、Javaは(hash & 0x7FFFFFFF) % tab.length
を使用して、{key、value}を配置する配列のスロットを決定します。
私の質問は、なぜJava最初にハッシュと0x7FFFFFFFを実行するのですか?特定の目的はありますか?
なぜなら-1 % 10 == -1
配列へのインデックス作成には絶対に必要ありません。符号ビットを0に強制すると、この問題を回避できます。
理由:
0x7FFFFFFF
は01111111 1111 1111 1111 1111 1111 1111:符号ビットを除くすべて1です。
(hash & 0x7FFFFFFF)
は正の整数になります。
(hash & 0x7FFFFFFF) % tab.length
はタブの長さの範囲になります。
Hashtable
は多かれ少なかれ古く、HashMap
に置き換えられていることに注意してください。これはhash & (table.length-1)
を使用して同じ目的を達成します。
ご覧のとおり、前にビットシフトも行います ここ 。これは、多様性の低い数値を返すhashCode()
メソッドの不適切な実装に対処するためです。