假设我有ArrayList<String> data;
我正在使用data.add()
函数将一些数据添加到此数组中。
假设我在这个数组中添加了10个字符串。现在数组的大小为10。
如何销毁数组中的所有元素? data.clear()
函数只将所有10个元素设置为null。因此,当我尝试添加另一个元素时,它只是处于11位置。我只想从0开始;
我可以使用for循环来替换所有数据,但我真的认为有一种方法可以清空ArrayList
。是吗?
答案 0 :(得分:65)
您的假设似乎不对。在clear()
之后,新添加的数据从索引0开始。
答案 1 :(得分:26)
如果您有任何疑问,请查看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
保持不变。
答案 2 :(得分:10)
ArrayList.clear(来自Java Doc):
从此列表中删除所有元素。此调用返回后,列表将为空
答案 3 :(得分:9)
在data.clear()
之后,肯定会从零索引再次开始。
答案 4 :(得分:8)
data.removeAll(data);
将完成这项工作。
答案 5 :(得分:5)
clear()
函数清除Arraylist并从索引0开始并不是真的
答案 6 :(得分:3)
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)