&bit运算符如何在这里工作?

Ros*_*han 7 java collections bit-manipulation

在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;
}
Run Code Online (Sandbox Code Playgroud)

怎么head = (h + 1) & (elements.length - 1);办?为什么在这里使用&运算符以及它的用途是什么.

我的问题不是如何和有效,但它在这里有什么用处.

有人能解释一下吗?

Hen*_*nry 11

这是一个快捷方式(h + 1) % elements.length,只有elements.length在两个权力的情况下才有效.在一些较旧的硬件上,这可能会稍快一些,但我怀疑在现代CPU上仍然如此.