发布日期:2018-03-26
ArrayList.clear()方法和ArrayList.removeAll()有什么不同之处?+ 查看更多
ArrayList.clear()方法和ArrayList.removeAll()有什么不同之处?
+ 查看更多
发布日期:2018-02-23 16:31
分类:JAVA
浏览次数:93
如下:
假设arraylist被定义为ArrayList<String> arraylist,arraylist.removeAll(arraylist)和arraylist.clear()相等吗?
如果是,我能认为clear()是更有效的清空arraylist的方式吗?
使用arraylist.removeAll(arraylist)代替arraylist.clear()会出现警告吗?
假设arraylist被定义为ArrayList<String> arraylist,arraylist.removeAll(arraylist)和arraylist.clear()相等吗?
如果是,我能认为clear()是更有效的清空arraylist的方式吗?
使用arraylist.removeAll(arraylist)代替arraylist.clear()会出现警告吗?
回答:
clear()的源码:
public void clear() { modCount++; // Let gc do its work for (int i = 0; i < size; i++) elementData[i] = null; size = 0; }
removeAll()的源码(定义在抽象集合中):
public boolean removeAll(Collection> c) { boolean modified = false; Iterator> e = iterator(); while (e.hasNext()) { if (c.contains(e.next())) { e.remove(); modified = true; } } return modified; }
clear()更加快速因为它不必调用额外的方法。
正如Atrey指出,c.contains(..)使得removeAll的时间复杂度变为O(n^2)而不是clear的O(n).
正如Atrey指出,c.contains(..)使得removeAll的时间复杂度变为O(n^2)而不是clear的O(n).