我通过看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;
}
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;
}
以下2行是什么意思?是按位运算吗?他们为什么使用它,这里的目的是什么?
head = (h + 1) & (elements.length - 1);
int t = (tail - 1) & (elements.length - 1);
我知道使用按位的一种情况是将 2 个值打包到 1 个变量中。但似乎情况并非如此。