5

HashMapコンストラクターからのこのコードスニペット、特に行 について説明してください

容量 <<= 1:

// Find a power of 2 >= initialCapacity
198         int capacity = 1;
199         while (capacity < initialCapacity)
200             capacity <<= 1;
4

4 に答える 4

11

と同等capacity = capacity << 1;です。
この操作は、容量のビットを 1 桁左にシフトします。これは、2 を掛けることと同じです。

あなたが投稿した特定のコードは、よりも大きい最小の 2 乗を見つけますinitialCapacity

したがってinitialCapacity、たとえば 27 の場合capacity、ループ後は 32 (2^5) になります。

于 2012-08-22T11:14:05.400 に答える
4

var += 1は とほぼ同等でありvar = var + 1、ここに表示されている ( var <<= 1) は とほぼ同等であり、「 の位置バイナリ左シフトの結果となるようにvar = var << 1設定されています」。var1var

この非常に特殊なケースでは、実際にはわずかに (実行時) 高速な表現方法ですcapacity *= 2(1 桁のビット単位の左シフトは 2 による乗算と同等であるため)。

于 2012-08-22T11:15:58.670 に答える
3

と同等です

capacity = capacity << 1;

これは、ビットをcapacity1 つの位置で左にシフトします (つまり、 に00011011なります00110110)。

于 2012-08-22T11:13:53.743 に答える
0

これがループから出るたびに、「容量」の値は 2 のべき乗で大きくなります。

最初のように 1 ie2^0; 操作 (容量 <<= 1) は初めて 2^1 になり、次に 2^2 になります。詳細については、http://www.tutorialspoint.com/java/java_basic_operators.htm を参照して ください。

于 2012-08-22T11:48:57.773 に答える