[英]How does & bit operator work here?
在Java Collection類中,我經常注意到如下代碼
//ArrayDeque
public E pollFirst() {
int h = head;
@SuppressWarnings("unchecked")
E result = (E) elements[h];
// Element is null if deque empty
if (result == null)
return null;
elements[h] = null; // Must null out slot
head = (h + 1) & (elements.length - 1);
return result;
}
什么head = (h + 1) & (elements.length - 1);
做什么? 為什么在這里使用&運算符以及它的用途是什么。
我的問題不是如何和有效,但它在這里有什么用處。
有人能解釋一下嗎?
它是(h + 1) % elements.length
的快捷方式,僅當elements.length
是2的冪時才有效。 在一些較舊的硬件上,這可能會稍快一些,但我懷疑在現代CPU上仍然如此。
那個&
操作不是%
的真正等價物,想想負數。 情況並非如此,但還有其他地方(如HashMap
),這可以通過以下方式完成:
(n - 1) & hash // n - current capacity, hash - hashcode
由於hashcode
是int值 - 它們可以是負數。 使用%
而不是&
將導致負數,這對於HashMap
根本不會發生(因為這是桶號)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.