【发布时间】:2016-03-16 23:40:54
【问题描述】:
我对此计划有疑问。
public class Main {
public static void main(String[] args) {
List<String> arrayList = new ArrayList<String>();
for(int i=0; i<100; i++){
arrayList.add("ValueA");
arrayList.add("ValueB");
arrayList.add(null);
arrayList.add("ValueC");
arrayList.add(null);
arrayList.add(null);
}
long startTime = System.nanoTime();
arrayList.removeAll(Collections.singleton(null));
long endTime = System.nanoTime();
System.out.println("ArrayList removal took: " + (endTime - startTime) + "ms");
List<String> linkedList = new LinkedList<String>();
for(int i=0; i<100; i++){
linkedList.add("ValueA");
linkedList.add("ValueB");
linkedList.add(null);
linkedList.add("ValueC");
linkedList.add(null);
linkedList.add(null);
}
startTime = System.nanoTime();
linkedList.removeAll(Collections.singleton(null));
endTime = System.nanoTime();
System.out.println("LinkedList removal took: " + (endTime - startTime) + "ms");
}
}
系统输出为:
ArrayList 删除耗时:377953ms
LinkedList 移除耗时:619807ms
为什么在 removeAll 上linkedList 比arrayList 花费更多时间?
【问题讨论】:
-
你能给我们更多的数据点吗?特别是,我希望看到
ArrayList和LinkedList的两条趋势线 -
你为什么希望它更快?
-
我不认为
removeAll()是一个特别好的基准,因为您只是在清空整个数据结构。更好的基准是删除随机元素。 -
@TimBiegeleisen,
removeAll(Collection)并没有真正清空整个 DS...而且他正在使用它... -
好点,我收回我说的话。删除上述代码中大小为 1000 的集合的第一个元素对于
ArrayList和LinkedList需要相同的时间,但删除中间元素对于后者比前者需要更多时间。
标签: java performance arraylist linked-list