我应该使用ArrayList.clear()还是创建一个新列表?

phi*_*yoo 1 java

所以,继续这篇文章:ArrayList.clear()和ArrayList.removeAll()有什么区别?......在某些情况下,实际上更好地使用removeAll()而不是clear()吗?


另外,要添加到这个问题,如果我知道我正在清除一个的所有内容ArrayList,是否可以将其设置为新的ArrayList

ArrayList myList = new ArrayList<String>();

myList.add("a");
myList.add("b");

// instead of using:  myList.clear();
myList = new ArrayList<String>()
Run Code Online (Sandbox Code Playgroud)

如果以上情况可以,再次,为什么使用clear()vs设置为新的ArrayList?创建一个新的空ArrayListO(n)快.

Nay*_*uki 9

为什么要使用clear()而不是创建新的ArrayList?几个原因:

  • 您可能不被允许重新分配指向ArrayList的引用字段,因此您可以清除现有列表但不能将新列表放在其位置.例如:

    class MyData {
        // Can clear() but not reassign
        final List<Object> list = new ArrayList<>();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 变量可能被声明为List.实际的类型可能是LinkedList,你想保留它而不是用一个替换实现ArrayList.

  • 它不一定是真正的clear()Ø(ñ)时间.一种实现策略是在O(n)时间内使后备阵列中的所有现有元素无效.但另一个同样有效的实现是扔掉那个内部数组并用一个新数组替换它,最好是一个短数组用于O(1)时间.