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集合清空

JAVA这个能分页吗? List<HashMap<String, String>> list = new ArrayList<HashMap<String, Str

list.clear() 与 list = new ArrayList<Integer>(); [复制]

当我在 ArrayList "A" 上调用 clear 时,Android ArrayList "B" 会清除