gpt4 book ai didi

java - ArrayDeque 中的方法 clear()

转载 作者:搜寻专家 更新时间:2023-11-01 02:57:30 24 4
gpt4 key购买 nike

为什么在 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),但分配新的内存块通常比清除已经存在的内存块慢分配。

关于java - ArrayDeque 中的方法 clear(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50473258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com