Java ArrayList clear() 函数
Posted
技术标签:
【中文标题】Java ArrayList clear() 函数【英文标题】:Java ArrayList clear() function 【发布时间】:2012-12-26 22:14:09 【问题描述】:假设我有一个ArrayList<String> data;
我正在使用data.add()
函数将一些数据添加到这个数组中。
假设我在这个数组中添加了 10 个字符串。数组的大小现在是 10。
如何销毁数组中的所有元素? data.clear()
函数只是将所有 10 个元素设置为空。所以当我尝试添加另一个元素时,它只是在第 11 位。我只想从 0 开始;
我可以使用for循环来替换所有数据,但我真的认为有一种方法可以清空ArrayList
。是吗?
【问题讨论】:
您是否有可以显示已损坏的较小测试用例?data.clear()
应该为您删除所有内容,但保留数组。 The size goes back to zero, though,所以你不会从 11 点开始,而是从 0
开始。
【参考方案1】:
您的假设似乎不正确。在clear()
之后,新添加的数据从索引0开始。
【讨论】:
我刚刚设法研究了我的代码。你真的是对的。我只是在我的其他方法中出现了错误,即填写了我以前的数据。我会先阅读文档,然后再提出愚蠢的问题。【参考方案2】:如果您有任何疑问,请查看 JDK 源代码
ArrayList.clear()
源代码:
public void clear()
modCount++;
// Let gc do its work
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
您会看到size
设置为 0,因此您从 0 位置开始。
请注意,当向ArrayList
添加元素时,后端数组会被扩展(即,如果需要,数组数据会复制到更大的数组中)以便能够添加新项目。在执行ArrayList.clear()
时,您只删除对数组元素的引用并将size
设置为0,但是,capacity
保持原样。
【讨论】:
【参考方案3】:ArrayList.clear(来自Java Doc):
从此列表中删除所有元素。此调用返回后列表将为空
【讨论】:
【参考方案4】:data.clear()
之后肯定会从零索引重新开始。
【讨论】:
【参考方案5】:我认为data.removeAll(data);
会完成这项工作。
【讨论】:
this 和clear()
都可以解决问题,但是 clear()
肯定会更快。 (OT:你刚刚达到 10K!)
@ninetwozero 非常感谢。我现在达到了 10K,你是第一个祝贺我的人。再次感谢 =)【参考方案6】:
clear()
函数不正确清除 Arraylist 并从索引 0 开始
【讨论】:
【参考方案7】:clear的源码说明了新添加的数据获得首位的原因。
public void clear()
modCount++;
// Let gc do its work
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
顺便说一下,clear() 比 removeAll() 快,第一个是 O(n) 而后者是 O(n_2)
【讨论】:
以上是关于Java ArrayList clear() 函数的主要内容,如果未能解决你的问题,请参考以下文章
ArrayList.clear() 和 ArrayList.removeAll() 有啥区别?
ArrayList.clear=nullnew Arraylist之间的对比区别
JAVA这个能分页吗? List<HashMap<String, String>> list = new ArrayList<HashMap<String, Str