【发布时间】:2018-11-01 13:13:44
【问题描述】:
为什么在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];
}
【问题讨论】:
-
你是在问为什么JDK使用(1)而不是(2)?
-
您的第二个选项将
elements缩小到初始大小,而不是保留数组的当前大小 -
通常还值得指出的是,无论何时创建数组,all of its elements are required to be initialized to a default value。这意味着当您执行
new Object[n]时,JVM 可能会立即将所有 n 元素设置为null。
标签: java collections arraydeque