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

2024-05-29

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#473 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) } 并使其符合垃圾回收条件? O(n) 性能clear()对我来说似乎不太好,或者我错过了什么?


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

如果他们将数组作为一个整体释放,那么调用之间的区别就很小了clear()并重新分配ArrayList本身。现在,您可以选择重新使用该阵列或用全新的阵列替换它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 java.util.Arraylist#clear 按照 OpenJDK 中的方式实现? 的相关文章

随机推荐