我最近阅读了一些框架源代码,并注意到他们编写了类似列表的数据结构的 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/