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

时间:2016-04-01 23:36:12

标签: java

所以,继续这篇文章:What is the difference between ArrayList.clear() and ArrayList.removeAll()? ...在某些情况下,使用x = np.array(list("abcdef")) x = x[x!='e'] # <-- THIS IS THE METHOD print x # array(['a', 'b', 'c', 'd', 'f']) 代替removeAll()实际上更好吗?

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

ArrayList

如果以上情况可以,请再次使用ArrayList myList = new ArrayList<String>(); myList.add("a"); myList.add("b"); // instead of using: myList.clear(); myList = new ArrayList<String>() vs设置为新clear()?创建一个新的空ArrayList O n )更快。

3 个答案:

答案 0 :(得分:9)

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

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

    class MyData {
        // Can clear() but not reassign
        final List<Object> list = new ArrayList<>();
    }
    
  • 该变量可能被声明为List。实际类型可以是LinkedList,您希望保留它而不是使用ArrayList替换实现。

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

答案 1 :(得分:1)

没有ArrayList.removeAll()。 但是有一个ArrayList.removeAll(Collection)

方法clear()应该比removeAll(Collection)快,因为removeAll(Collection)会进行一些比较,以决定是否应该从列表中删除对象。 clear()方法无需考虑即可删除所有内容。

答案 2 :(得分:0)

如果您要从列表中删除特定的集合,但又不想删除所有内容,则将使用“删除所有”删除要删除的集合。