arj*_*soh 6 java linked-list arraylist listiterator
我正在阅读之间的不同之处ArrayList
并LinkedList
指出何时使用LinkedList而不是ArrayList?.我开发了一个小的示例applcation来测试一个主要的优点LinkedList
但是我获得的结果没有证实,这LinkedList
超过ArrayList
了操作的性能:
ListIterator.add(E element)
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
public static void main(String[] args) {
int number = 100000;
long startTime1 = System.currentTimeMillis();
fillLinkedList(number);
long stopTime1 = System.currentTimeMillis();
long startTime2 = System.currentTimeMillis();
fillArrayList(number);
long stopTime2 = System.currentTimeMillis();
System.out.println(" LinkedList needed: "+ (stopTime1 - startTime1));
System.out.println(" ArrayList needed: "+ (stopTime2 - startTime2));
}
public static void fillLinkedList(int number){
LinkedList<Integer> list = new LinkedList<Integer>();
ListIterator<Integer> it = list.listIterator();
int i = 0;
while(i++<number){
it.add(i);
}
// System.out.println("LinkedList size: "+list.size());
}
public static void fillArrayList(int number){
ArrayList<Integer> list = new ArrayList<Integer>();
ListIterator<Integer> it = list.listIterator();
int i = 0;
while(i++<number){
it.add(i);
}
// System.out.println("ArrayList size: "+list.size());
}
Run Code Online (Sandbox Code Playgroud)
测量给出:
number 10,000 100,000 500,000 1,000,000 5,000,000
ArrayList 7 17 60 77 170
LinkedList 7 21 89 838 4127
Run Code Online (Sandbox Code Playgroud)
我注意到元素的增加显着地损害了性能,LinkedList
同时ArrayList
提供了相当好的行为.我明白了什么吗?
ArrayList
在容器末端添加元素或非常接近时更快,因为它不需要移动许多元素.在中间或开头添加时速度很慢.我把你的循环改成了以下内容:
while(i++<number){
it.add(i);
if(i%2 == 0)
it.previous();
}
Run Code Online (Sandbox Code Playgroud)
现在,it
总是指向中间list
.有了这个基准,LinkedList
速度就快得多.结果为200000:
LinkedList needed: 47
ArrayList needed: 4702
Run Code Online (Sandbox Code Playgroud)