为什么ArrayDeque
要明确这一点,使用 (1)do-while 删除每个元素,而不是创建具有起始大小的新数组和 (2) 覆盖包含元素的数组?
(1)
public void clear() {
int h = head;
int t = tail;
if (h != t) { // clear all cells
head = tail = 0;
int i = h;
int mask = elements.length - 1;
do {
elements[i] = null;
i = (i + 1) & mask;
} while (i != t);
}
}
(2)
public void clear() {
head = tail = 0;
elements = null;
elements = (T[]) Object[START_SIZE];
}