Java 集合 ArrayList清空

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

这里arraylistArrayList类的一个实例。

代码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)

赞(0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

Java 集合