假设我有一个ArrayList<String> data;
我正在使用data.add()
函数将一些数据添加到这个数组中。假设我在这个数组中添加了 10 个字符串。数组的大小现在是 10。
如何销毁数组中的所有元素?该data.clear()
函数刚刚将所有 10 个元素设置为 null。所以当我尝试添加另一个元素时,它只是在第 11 位。我只想从 0 开始;
我可以使用 for 循环来替换所有数据,但我真的认为有一种方法可以清空ArrayList
. 是吗?
你的假设似乎不正确。在 a 之后clear()
,新添加的数据从索引 0 开始。
如果您有任何疑问,请查看 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
保持原样。
ArrayList.clear(来自Java 文档):
从此列表中删除所有元素。此调用返回后列表将为空
之后data.clear()
肯定会从零索引重新开始。
data.removeAll(data);
会做的工作,我想。
clear()
函数清除 Arraylist 并从索引 0 开始不是真的
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)