HashMapコンストラクターからのこのコードスニペット、特に行 について説明してください
容量 <<= 1:
// Find a power of 2 >= initialCapacity
198 int capacity = 1;
199 while (capacity < initialCapacity)
200 capacity <<= 1;
HashMapコンストラクターからのこのコードスニペット、特に行 について説明してください
容量 <<= 1:
// Find a power of 2 >= initialCapacity
198 int capacity = 1;
199 while (capacity < initialCapacity)
200 capacity <<= 1;
と同等capacity = capacity << 1;
です。
この操作は、容量のビットを 1 桁左にシフトします。これは、2 を掛けることと同じです。
あなたが投稿した特定のコードは、よりも大きい最小の 2 乗を見つけますinitialCapacity
。
したがってinitialCapacity
、たとえば 27 の場合capacity
、ループ後は 32 (2^5) になります。
var += 1
は とほぼ同等でありvar = var + 1
、ここに表示されている ( var <<= 1
) は とほぼ同等であり、「 の位置バイナリ左シフトの結果となるようにvar = var << 1
設定されています」。var
1
var
この非常に特殊なケースでは、実際にはわずかに (実行時) 高速な表現方法ですcapacity *= 2
(1 桁のビット単位の左シフトは 2 による乗算と同等であるため)。
と同等です
capacity = capacity << 1;
これは、ビットをcapacity
1 つの位置で左にシフトします (つまり、 に00011011
なります00110110
)。
これがループから出るたびに、「容量」の値は 2 のべき乗で大きくなります。
最初のように 1 ie2^0; 操作 (容量 <<= 1) は初めて 2^1 になり、次に 2^2 になります。詳細については、http://www.tutorialspoint.com/java/java_basic_operators.htm を参照して ください。