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;
该操作将容量的位向左移动一位,相当于乘以 2。

您发布的特定代码找到大于 2 的最小幂initialCapacity

initialCapacity因此,例如if是 27,capacity在循环之后将是 32 (2^5)。

于 2012-08-22T11:14:05.400 回答
4

就像var += 1是大约等价于var = var + 1,您在此处看到的 ( var <<= 1) 大致等价于var = var << 1,即“设置var为 的1-position 二进制左移的结果var”。

在这个非常具体的情况下,它实际上是一种稍微(运行时)更快的表达方式capacity *= 2(因为按位左移 1 个位置相当于乘以 2)。

于 2012-08-22T11:15:58.670 回答
3

它相当于

capacity = capacity << 1;

它将位向左移动capacity一个位置(即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 回答