使用 java 中的位移位器将通用数组的大小加倍
Doubling generic array's size with bit shifters in java
如果通用数组的大小已达到我的 maxCapacity
值,我将尝试将其加倍。当然,我可以通过乘以我的 maxCapacity * 2
来做到这一点,这将使我能够附加两倍的值。问题是我看到以某种方式使用移位器可以实现相同的目的。它与运算符 =<<
或 =>>
或类似的东西有关。
这是我的代码:
....
private E [ ] list;
private int maxCapacity, currentSize;
....
maxCapacity = 10;
currentSize = 0;
if(currentSize > maxCapacity)
maxCapacity *= 2;
...
我的 maxCapacity 不是数组的实际大小,但在我的方法中,我确保在将对象插入数组时,它不会超过 maxCapacity
值。
你知道如何在运行中使用位移运算符来实现相同的行为吗?我不知道这是否可能,但我记得不久前看过一些采用这种行为的代码。
感谢您的帮助!
如果我理解正确,你必须这样做:
if (currentSize > maxCapacity)
maxCapacity <<= 1;
用 1
向左移动将使 maxCapacity
的值加倍。
例如,如果 maxCapacity
是 5
,则它的二进制表示形式将是 101
。使用 1
移位意味着将单个 0
附加到二进制表示形式,这将使它成为 1010
。这现在代表 10
.
如果通用数组的大小已达到我的 maxCapacity
值,我将尝试将其加倍。当然,我可以通过乘以我的 maxCapacity * 2
来做到这一点,这将使我能够附加两倍的值。问题是我看到以某种方式使用移位器可以实现相同的目的。它与运算符 =<<
或 =>>
或类似的东西有关。
这是我的代码:
....
private E [ ] list;
private int maxCapacity, currentSize;
....
maxCapacity = 10;
currentSize = 0;
if(currentSize > maxCapacity)
maxCapacity *= 2;
...
我的 maxCapacity 不是数组的实际大小,但在我的方法中,我确保在将对象插入数组时,它不会超过 maxCapacity
值。
你知道如何在运行中使用位移运算符来实现相同的行为吗?我不知道这是否可能,但我记得不久前看过一些采用这种行为的代码。
感谢您的帮助!
如果我理解正确,你必须这样做:
if (currentSize > maxCapacity)
maxCapacity <<= 1;
用 1
向左移动将使 maxCapacity
的值加倍。
例如,如果 maxCapacity
是 5
,则它的二进制表示形式将是 101
。使用 1
移位意味着将单个 0
附加到二进制表示形式,这将使它成为 1010
。这现在代表 10
.