Java ArrayList clear()函数

时间:2013-01-12 12:23:44

标签: java list arraylist

假设我有ArrayList<String> data;

我正在使用data.add()函数将一些数据添加到此数组中。 假设我在这个数组中添加了10个字符串。现在数组的大小为10。

如何销毁数组中的所有元素? data.clear()函数只将所有10个元素设置为null。因此,当我尝试添加另一个元素时,它只是处于11位置。我只想从0开始;

我可以使用for循环来替换所有数据,但我真的认为有一种方法可以清空ArrayList。是吗?

7 个答案:

答案 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)