ArrayList采用的数组的形式来保存对象的,这种当时将对象发在连续的位置中。
缺点:插入删除的时候非常麻烦。
LinkedList采用将对象放在独立的空间中,而且在每个空间还保存着下一个对象的索引。
缺点:查找非常麻烦,要从第一个开始索引。
因此:在相同的位置 index 插入数据,index 越靠前,ArrayList需要挪动的数据就最多,插入的时间就越长;而LinkedList从第一开始索引的数据就越少,插入的时间越短。当index忘后移时,ArrayList需要挪动的数据就越少,插入的时间就渐短;而LinkedList从第一个数据开始索引的数据就越多,插入的时间就渐长。
1 import java.util.*; 2 3 public class compare_ArrayListAndLinkedList{ 4 public static void main(String [] args){ 5 List arrayList = new ArrayList(); 6 List linkedList = new LinkedList(); 7 8 for(int i=0 ; i< 100000 ;i++){ 9 arrayList.add(i); 10 linkedList.add(i); 11 } 12 arrayList = new compare_ArrayListAndLinkedList().testInsertArrayList(arrayList); 13 14 linkedList = new compare_ArrayListAndLinkedList().testInsertLinkedList(linkedList); 15 16 } 17 18 public List testInsertArrayList(List ls){ 19 long start = 0; 20 long end = 0; 21 22 start = System.currentTimeMillis(); 23 for(int k=0;k<100000;k++){ 24 ls.add(10000+k,100); //在末尾插入的时间 25 // ls.add(1,100); 在前面插入的时间 26 } 27 end = System.currentTimeMillis(); 28 29 System.out.println("start = " + start); 30 System.out.println("end = "+ end); 31 System.out.println("ArrayList在指定位置插入的时间:" + (end-start)); 32 return ls; 33 } 34 35 public List testInsertLinkedList(List ls){ 36 long start = 0; 37 long end = 0; 38 39 start = new Date().getTime();//System.currentTimeMillis(); 40 for(int k=0;k<100000;k++){ 41 ls.add(10000+k,100); //在末尾插入的时间 42 // ls.add(1,100); 在前面插入的时间 43 } 44 end = new Date().getTime(); //System.currentTimeMillis(); 45 46 System.out.println("start = " + start); 47 System.out.println("end = "+ end); 48 System.out.println("LinkedList在指定位置插入的时间:"+ (end- start)); 49 return ls; 50 } 51 }
在末尾插入的时间:
在首部插入的时间: