java - 如何在列表数据结构中编写 clear() 方法?

标签 java data-structures

我最近阅读了一些框架源代码,并注意到他们编写了类似列表的数据结构的 clear() 方法。 一个一个地删除元素。

while (_arr.length > 0 )
{

    remove(_arr[0]);

}       

(也许上面看起来有点困惑,但这是因为该语言本身的原生数组类型是动态数组) 或

 for (int i = 0; i < size; i++)
  { elementData[i] = null;}
 size = 0;

但我记得我写过一些这样的代码。 列表修饰了原生数组类型,我写了这样的 clear() 方法。

 _arr=new Array();
 _size=0;

直接实例化一个新的原生数组类型。

并且此代码是用具有垃圾收集功能的语言编写的。 所以我认为所有元素最终都会被收集,那么为什么需要一个循环?一个新的会很快吗?

最佳答案

我想动机是重新使用现有的支持数组,而不是分配一个新的。这一点很重要,尤其是当后备数组非常大时(在极少数情况下,这甚至可能意味着在旧数组被垃圾回收之前无法分配新数组)。

分配一个新数组(并对旧数组进行垃圾回收)可能比迭代现有数组并将所有元素的引用设置为 null 更耗时。

编辑:如评论中所述,在基于数组的 List 中设置对 null 的引用是不够的。您还必须指出 List 为空。在 java.util.ArrayList 中,这是通过将 size 属性设置为 0 来完成的。

关于java - 如何在列表数据结构中编写 clear() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45814389/

相关文章:

java - Java 中的 Where 子句

algorithm - 常分区快速排序算法

java - 使用 Multibinding 概括 guice 的机器人腿示例

java - 检查字符串是否具有特定格式?

java - 在后台播放声音文件 (.wav) 并让 block 振动

java - Android 开发者上的 CustomButton

java - 具有两种 O(1) 查找方式的数据结构。哈希表?

data-structures - 代表游戏板的最佳数据结构

algorithm - "... algorithm follows at most lg N pointers to determine..."lg代表什么?

java - 表示字符串模式的数据结构