有两种方法可以清空ArrayList
– 使用 ArrayList.clear()
方法或借助 ArrayList.removeAll()
方法。尽管两种方法都执行相同的任务,但它们清空List
的方式却截然不同。
让我们先看下面的例子,然后我们将看到clear()
和removeAll()
之间的实现和区别。
package beginnersbook.com;
import java.util.ArrayList;
import java.io.*;
public class Details
{
public static void main(String [] args)
{
ArrayList<String> al1=new ArrayList<String>();
al1.add("abc");
al1.add("xyz");
System.out.println("ArrayList before clear: "+al1);
al1.clear();
System.out.println("ArrayList after clear: "+al1);
ArrayList<String> al2=new ArrayList<String>();
al2.add("text 1");
al2.add("text 2");
System.out.println("ArrayList before removeAll: "+al2);
al2.removeAll(al2);
System.out.println("ArrayList before removeAll: "+al2);
}
}
输出:
ArrayList before clear: [abc, xyz]
ArrayList after clear: []
ArrayList before removeAll: [text 1="text" 2="2" language="1,"][/text]
ArrayList before removeAll: []
因为你们两个方法都可以完成相同的工作,所以它们会清空ArrayList
。是时候确定哪种方法可以提供良好的性能。
clear()
方法的实际代码:
public void clear() {
for (int i = 0; i < size; i++)
arraylist[i] = null;
size = 0;
}
这里arraylist
是ArrayList
类的一个实例。
代码removeAll()
方法:
public boolean removeAll(Collection c) {
boolean ismodified = false;
Iterator iterator = iterator();
while (iterator.hasNext()) {
if (c.contains(iterator.next())) {
iterator.remove();
ismodified = true;
}
}
return ismodified;
}
通过查看这两种方法的代码,我们可以很好地说,与removeAll()
方法相比,clear()
方法提供了更好的性能。
clear
的性能:O(n)
removeAll
的性能:O(n^2)