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

2022-08-31 05:07:59

假设它被定义为 ,arraylist.removeAll(arraylist) 是否等同于 arraylist.clear()arraylistArrayList<String> arraylist

如果是这样,我是否可以假设该方法对于清空数组列表更有效?clear()

使用代替是否有任何警告?arraylist.removeAll(arraylist)arraylist.clear()


答案 1

的源代码:clear()

public void clear() {
    modCount++;

    // Let gc do its work
    for (int i = 0; i < size; i++)
        elementData[i] = null;

    size = 0;
}

的源代码(定义见):removeAll()AbstractCollection

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 所指出的,增加了 O(n2) 的时间复杂度,而不是 O(n)。c.contains(..)removeAllclear


答案 2

的时间复杂度 是 和 是 。ArrayList.clear()O(n)removeAllO(n^2)

所以,是的,快得多。ArrayList.clear


推荐