rad*_*tao 8 java capacity deque arraydeque
在Java中(但在PHP中类似),ArrayDeque实现的能力始终为2的幂:
对于HashMap这种选择很明显-基于修剪的32位哈希具有均匀的元素分布。但是Deque顺序插入/删除元素。
同样,ArrayList不将其容量限制为2的幂,只是确保其至少为元素数量。
那么,为什么Deque实现要求其容量为2的幂?
我猜是出于性能原因。例如,让我们看一下addLast函数的实现:
public void addLast(E e) {
if (e == null)
throw new NullPointerException();
elements[tail] = e;
if ( (tail = (tail + 1) & (elements.length - 1)) == head)
doubleCapacity();
}
Run Code Online (Sandbox Code Playgroud)
因此,代替tail = (tail + 1) % elements.length写是可能的tail = (tail + 1) & (elements.length - 1)(&比更快%)。这样的构造在ArrayDeque的源代码中已多次使用。
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |