有两种方法可以清空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)
