3

と思います

(hash >>> segmentShift) & segmentMask

等しい

(hash >>> segmentShift)

たとえば、ssize は 16、sshift は 4 なので、segmentShift は 28、segmentMask は 15 です。

hash >>> segmentShift

セグメントマスクで操作を行うと、上位4ビットになりますが、何も変更されません。

私が誤解している点は何ですか?

4

2 に答える 2

0

さて、ここからわかることは、この操作全体が

(ハッシュ >>> セグメントシフト) & セグメントマスク

テーブル内のセグメントの位置を見つけるために使用されます。既に述べたように、 (hash >>> segmentShift) はキーのハッシュの上位 4 ビットを取得するために使用されます。

ただし、セグメント マスクの主な役割は、セグメント テーブル配列にセグメントを均等に分散することです。ConcurrentHashMap には多くのセグメントがあるため、衝突を避けるために、このセグメント マスクが使用されます。また、セグメントマスクは [(2 の累乗)-1] です。

この概念は、[hash & (length_of_hashmap-1)] を使用してハッシュマップ内のキーのインデックスを検索する HashMap に似ています。

hashmap の長さは常に 2 の累乗であり、この場合、segmentmask も (2 の累乗)-1 です。

ハッシュマップの hashmap%size と同じ概念で機能するため、インデックスは hahsmap の長さを超えません。

于 2013-08-20T03:19:32.130 に答える