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(..)将removeAll的时间复杂度增加到O(n ^ 2),而不是清除O(n)。