我看看通過java源代碼試着學習集合的實現。 在ArrayDeque類中找到了一件有趣的事情。爲什麼ArrayDeque類在pollFirst方法中使用按位操作?
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;
}
public E pollLast() {
int t = (tail - 1) & (elements.length - 1);
@SuppressWarnings("unchecked")
E result = (E) elements[t];
if (result == null)
return null;
elements[t] = null;
tail = t;
return result;
}
以下兩行代表什麼意思? 這是一個按位操作嗎?他們爲什麼使用它,這裏的目的是什麼?
head = (h + 1) & (elements.length - 1);
int t = (tail - 1) & (elements.length - 1);
我知道使用按位的一種情況是將2個值打包在1個變量中。但似乎並非如此。