ArrayDeque中的方法clear()

时间:2018-05-22 17:18:04

标签: java collections 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]; 
}

1 个答案:

答案 0 :(得分:3)

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

你可以选择从头开始重新创建数组(我认为你错过了new),但是分配一大块内存通常比清除你已经存在的内存慢一些被分配了。