您能否具体解释一下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;
。
该操作将容量的位向左移动一位,相当于乘以 2。
您发布的特定代码找到大于 2 的最小幂initialCapacity
。
initialCapacity
因此,例如if是 27,capacity
在循环之后将是 32 (2^5)。
就像var += 1
是大约等价于var = var + 1
,您在此处看到的 ( var <<= 1
) 大致等价于var = var << 1
,即“设置var
为 的1
-position 二进制左移的结果var
”。
在这个非常具体的情况下,它实际上是一种稍微(运行时)更快的表达方式capacity *= 2
(因为按位左移 1 个位置相当于乘以 2)。
它相当于
capacity = capacity << 1;
它将位向左移动capacity
一个位置(即00011011
变为00110110
)。
每次从循环中出来时,“容量”的值都会增加 2 次幂。
就像最初它是 1 ie2^0; 第一次操作(容量 <<= 1)使其变为 2^1,然后变为 2^2,依此类推。可能你想在 http://www.tutorialspoint.com/java/java_basic_operators.htm看到更多关于它的信息