假设我有一个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)