arraylist
がと定義されていると仮定するとArrayList<String> arraylist
、arraylist.removeAll(arraylist)
に相当arraylist.clear()
?
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 が指摘するように、c.contains(..)
の時間計算量は のO(n)に対してremoveAll
O(n 2clear
) に増加します。