gpt4 book ai didi

java - 为什么 java.util.Arraylist#clear 是按照它在 OpenJDK 中的方式实现的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:08:40 25 4
gpt4 key购买 nike

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#473

public void clear() {
modCount++;

// Let gc do its work
for (int i = 0; i < size; i++)
elementData[i] = null;

size = 0;
}

我的问题是,为什么他们必须通过支持数组 { O(n) } 进行循环以使每个元素符合垃圾回收条件,而他们本可以重新初始化支持数组,丢弃对整个数组的引用整个 { O(1) } 并使其符合垃圾收集条件?clear() 的 O(n) 性能对我来说似乎不太好,还是我遗漏了什么?

最佳答案

按照他们的方式进行操作可以让您重用阵列而无需重新分配其后备存储。如果您想重新分配数组,您可以自己完成,因为 ArrayList 的表示主要由其后备存储组成。

如果他们将数组作为一个整体发布,那么调用 clear() 和重新分配 ArrayList 本身之间的区别就很小了。现在,他们为您提供了一个选项,让您可以选择重新使用阵列还是用全新的阵列替换它。

关于java - 为什么 java.util.Arraylist#clear 是按照它在 OpenJDK 中的方式实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18232601/

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