ArrayDeque 中的方法 clear()

method clear() in ArrayDeque

为什么在 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]; 
}

您希望在 clear() 中将每个元素显式设置为 null 的原因是,否则您可能会引入一种内存泄漏形式。也就是说,elements[] 数组可以保留对对象的引用并防止它们被垃圾回收。

你从头开始重新创建数组的替代方法是可行的(我认为你错过了 new),但分配新的内存块通常比清除你已经分配的内存块慢.