ArrayList.clear()和ArrayList.removeAll()有什么区别?

问题:

假设arraylist定义为ArrayList<String> arraylist,是arraylist.removeAll(arraylist)相当于arraylist.clear()
如果是这样,我可以假设clear()方法更有效地排空数组列表吗?
使用arraylist.removeAll(arraylist)而不是arraylist.clear()有什么注意事项吗?

回答:

clear()的源代码

public void clear() {
    modCount++;

    // Let gc do its work
    for (int i = 0; i < size; i++)
        elementData&#91;i&#93; = null;

    size = 0;
}
&#91;/code&#93;
<code>removeAll()</code>(如<code>AbstractCollection</code>中定义)的源代码:

public boolean removeAll(Collection<?> c) {
    boolean modified = false;
    Iterator<?> e = iterator();
    while (e.hasNext()) {
        if (c.contains(e.next())) {
            e.remove();
            modified = true;
        }
    }
    return modified;
}

 clear()更快,因为它不必处理所有这些额外的方法调用。
正如Atrey指出的,c.contains(..)removeAll的时间复杂度增加到O(n ^ 2)而不是clear的O(n)。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What is the difference between ArrayList.clear() and ArrayList.removeAll()?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 75 = 80