Java中ArrayList和LinkedList性能的比较(结果总是怪怪的,如果有不当还请指出)。
不说废话,直接看代码:
1 /** 2 * @author HuYang 3 * @date 2016年8月15日 下午3:26:43 4 */ 5 public class TestJiHe { 6 7 private static ListaList = new ArrayList (); 8 private static List kList = new LinkedList (); 9 //测试变量 10 private static int para; 11 12 public static void add(List list){ 13 int i = 0; 14 long startTime = System.currentTimeMillis(); 15 while(i<para){ 16 list.add(i); 17 i++; 18 } 19 long endTime = System.currentTimeMillis(); 20 System.out.println(list.getClass().getSimpleName()+" "+"添加用时:"+(endTime - startTime)); 21 } 22 23 public static void delete(List<?> list){ 24 Random r = new Random(); 25 int index = r.nextInt(para); 26 long startTime = System.currentTimeMillis(); 27 list.remove(index); 28 long endTime = System.currentTimeMillis(); 29 System.out.println(list.getClass().getSimpleName()+" "+"第"+index+"被删除:"+index+",删除用时> "+(endTime - startTime)); 30 } 31 32 public static void get(List list){ 33 Random r = new Random(); 34 int index = r.nextInt(para); 35 long startTime = System.currentTimeMillis(); 36 int value = list.get(index); 37 long endTime = System.currentTimeMillis(); 38 System.out.println(list.getClass().getSimpleName()+" "+"第"+index+"数据是:"+value+",查询用时> "+(endTime - startTime)); 39 } 40 41 public static void iterator(List<?> list){ 42 Iterator<?> inter = list.iterator(); 43 long startTime = System.currentTimeMillis(); 44 while(inter.hasNext()){ 45 inter.next(); 46 } 47 long endTime = System.currentTimeMillis(); 48 System.out.println(list.getClass().getSimpleName()+" "+"遍历用时:"+(endTime - startTime)); 49 } 50 51 public static void main(String[] args){ 52 53 //测试数据量赋值 54 para = 9999; 55 56 //创建测试对象 57 aList = new ArrayList (); 58 kList = new LinkedList (); 59 60 //执行测试 61 add(aList); 62 iterator(aList); 63 get(aList); 64 delete(aList); 65 System.out.println("<<=====================>>"); 66 add(kList); 67 iterator(kList); 68 get(kList); 69 delete(kList); 70 } 71 }
测试结果:
ArrayList 添加用时:3 ArrayList 遍历用时:2 ArrayList 第9629数据是:9629,查询用时> 0 ArrayList 第4227被删除:4227,删除用时> 0 <<=====================>> LinkedList 添加用时:2 LinkedList 遍历用时:1 LinkedList 第3022数据是:3022,查询用时> 1 LinkedList 第266被删除:266,删除用时> 0
增加para的值为:99999(每次执行的用时结果和CPU的时间片分配有关,但是大致走势不变):
ArrayList 添加用时:10 ArrayList 遍历用时:9 ArrayList 第47622数据是:47622,查询用时> 0 ArrayList 第74386被删除:74386,删除用时> 0 <<=====================>> LinkedList 添加用时:8 LinkedList 遍历用时:11 LinkedList 第4682数据是:4682,查询用时> 0 LinkedList 第62292被删除:62292,删除用时> 0
增加para的值为:999999(每次执行的用时结果和CPU的时间片分配有关,但是大致走势不变):
ArrayList 添加用时:21 ArrayList 遍历用时:9 ArrayList 第497726数据是:497726,查询用时> 0 ArrayList 第415678被删除:415678,删除用时> 0 <<=====================>> LinkedList 添加用时:75 LinkedList 遍历用时:21 LinkedList 第111957数据是:111957,查询用时> 1 LinkedList 第151875被删除:151875,删除用时> 1
结果大家分析一下就知道了,不做阐述。但是总感觉是ArrayList的性能在数据量较大时会比LinkedList好些,不知道是否正确,还请大家多多指教。
欢迎留言补充。