java - & 位运算符如何在这里工作?

标签 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;
}

head = (h + 1) & (elements.length - 1); 是做什么的? 为什么要在这里使用 & 运算符,它有什么作用。

我的问题不是 & 是如何工作的,而是它在这里有什么用。

谁能解释一下?

最佳答案

它是 (h + 1) % elements.length 的快捷方式,仅当 elements.length 是 2 的幂时才有效。在一些较旧的硬件上,这可能会运行得稍微快一些,但我怀疑在现代 CPU 上是否仍然如此。

关于java - & 位运算符如何在这里工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44984413/

相关文章:

java - 如何从 JAVA 中的两个集合中获取不匹配的字符串?

java - 32 位整数上的 RotateLeft 操作

C 右移无法正常工作

c - SIM800 中通过位联动的一根线协议(protocol)

java - 在 hibernate 搜索中,索引时的整数值似乎存储为字符

php - Laravel 5 - SimplePaginate 函数在这里不起作用?

java - 将 List 转换为 Object<class> 时出现 ClassCastException?

java - 初始化数组列表

java - holder.getAdapterPosition() 和 onBindViewHolder() 中构造函数的位置属性有什么区别

java - 在 Datomic 中更新具有多个基数的属性的事务