# 如何在 Java 中清空`ArrayList`

> 原文： [https://beginnersbook.com/2013/12/how-to-empty-an-arraylist-in-java/](https://beginnersbook.com/2013/12/how-to-empty-an-arraylist-in-java/)

有两种方法可以清空`ArrayList` - 使用 [`ArrayList.clear()`](https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#clear())方法或借助 [`ArrayList.removeAll()`](https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#removeAll(java.util.Collection))方法。尽管两种方法都执行相同的任务，但它们清空`List`的方式却截然不同。

让我们先看下面的例子，然后我们将看到`clear()`和`removeAll()`之间的实现和区别。

```java
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); 
    }
}
```

输出：

```java
ArrayList before clear: [abc, xyz]
ArrayList after clear: []
ArrayList before removeAll: [text 1="text" 2="2" language="1,"][/text]
ArrayList before removeAll: []
```

因为你们两个方法都可以完成相同的工作，所以它们会清空`ArrayList`。是时候确定哪种方法可以提供良好的性能。

`clear()`方法的实际代码：

```java
public void clear() {
    for (int i = 0; i < size; i++)
        arraylist[i] = null;

    size = 0;
}
```

这里`arraylist`是`ArrayList`类的一个实例。

代码`removeAll()`方法：

```java
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)`