请您解释一下HashMap constructor中的代码段,特别是
行容量<< = 1:
// Find a power of 2 >= initialCapacity
198 int capacity = 1;
199 while (capacity < initialCapacity)
200 capacity <<= 1;
答案 0 :(得分:11)
相当于capacity = capacity << 1;
该操作将容量位向左移一位,相当于乘以2.
您发布的特定代码的最小权力为2,大于initialCapacity
。
因此,如果initialCapacity
为27,则循环后capacity
将为32(2 ^ 5)。
答案 1 :(得分:4)
就像var += 1
大约等同于var = var + 1
一样,您在此处看到的内容(var <<= 1
)大约相当于var = var << 1
,即“var
是1
的{{1}}位置二进制左移var
。
在这个非常具体的情况下,它实际上是一种表达capacity *= 2
的稍微(运行时)更快的方式(因为1位的按位左移相当于乘以2)。
答案 2 :(得分:3)
相当于
capacity = capacity << 1;
将capacity
中的位向左移一位(即00011011
变为00110110
)。
答案 3 :(得分:0)
每次从循环中出来时,'capacity'的值会因功率提高而增加2。
最初它是1,即2 ^ 0;第一次的操作(容量&lt;&lt; = 1)使其成为2 ^ 1然后是2 ^ 2,依此类推。 您可能希望在http://www.tutorialspoint.com/java/java_basic_operators.htm 上看到更多内容