2016-04-01 127 views
1

所以,继续这篇文章:What is the difference between ArrayList.clear() and ArrayList.removeAll()? ...有某些情况下,它实际上更好地使用removeAll(),而不是clear()我应该使用ArrayList.clear()还是创建一个新列表?


此外,添加到这个问题,如果我知道我的清的ArrayList所有内容,这将是确定将其设置为一个新的ArrayList

ArrayList myList = new ArrayList<String>(); 

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

// instead of using: myList.clear(); 
myList = new ArrayList<String>() 

如果上述是确定的事,再次,为什么要用clear() VS设置到一个新的ArrayList?创建新的空ArrayList更快(n))。

+3

是的,如果你需要''去除'',''所有'在_another_'列表''从当前的元素。 'clear'和'removeAll'是完全不同的方法,具有完全不同的用例。你几乎**从不**想要分配一个'新的ArrayList'而不是调用'clear'--例如,你怎么知道你所拥有的'List'是一个'ArrayList'? –

回答

9

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

  • 你可能不会被允许重新分配指向一个ArrayList引用字段,这样你就可以清除现有的名单,但没有把它的位置一个新的。例如:

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

  • 它不一定是真正的clear()Øñ)时间。一种实现策略是取消后备阵列中所有现有元素的时间。但另一个同样有效的实现是丢弃该内部阵列并用新阵列取代它,优选地用于短阵列((012)(1)时间)。

1

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

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

+0

这些方法完全是_different_,并且您正在回答的问题已在[链接的问题]中得到解答(https://stackoverflow.com/questions/7032070/what-is-the-difference-between-arraylist-clear-and -arraylist-removeall过)。你[比较苹果和橙子](https://en.wikipedia.org/wiki/Apples_and_oranges)而不回答这个问题。 –

0

如果您想要从列表中删除特定集合,但不想删除所有内容,则需要使用要删除的集合进行全部删除。

相关问题