1. ホーム

[解決済み】ArrayList.clear()とArrayList.removeAll()の違いは何ですか?)

2022-03-30 21:17:28

質問

と仮定すると 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[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() は、余分なメソッド呼び出しに対処する必要がないため、より高速に動作します。

そして、アトレーが指摘するように c.contains(..) の時間的複雑性を増大させます。 removeAll をO(n 2 とは対照的です。 clear のO(n)である。