在学java数据结构的时候发现有LinkedList与ArrayList,就想知道他们的性能如何,所以做了如下的对比,
对比做得比较粗糙,也很不严谨,不过也有一定的参考价值吧。
/* * 测试数据大小 1000 - 100000 * 测试List的3个方法: * 1、add(Element) 新加入元素 * 2、add(index,Element) 固定位置插入元素 * 3、remove(Element) 删除特定元素 * 结果为执行所需时间 */ import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class LinkListTest { public static void main(String[] args) { long time; int TestNum ; List<String> link_list = null; List<String> array_list = null; for(int j = 3 ; j <=5 ;j ++){ TestNum = (int)Math.pow(10, j); System.out.println("Test amount :"+TestNum); link_list = new LinkedList<String>(); array_list = new ArrayList<String>(); /*list add*/ time = System.currentTimeMillis(); for(int i = 0 ; i<TestNum ; i++){ link_list.add(i+""); } time = System.currentTimeMillis() - time; System.out.printf("%18s:%6dms\n","link_list_add",time); time = System.currentTimeMillis(); for(int i = 0 ; i<TestNum ; i++){ array_list.add(i+""); } time = System.currentTimeMillis() - time; System.out.printf("%18s:%6dms\n","array_list_add",time); /*list add index*/ time = System.currentTimeMillis(); for(int i = 0 ; i<TestNum ; i++){ link_list.add(i*2, i+""); } time = System.currentTimeMillis() - time; System.out.printf("%18s:%6dms\n","link_list_insert",time); time = System.currentTimeMillis(); for(int i = 0 ; i<TestNum ; i++){ array_list.add(i*2, i+""); } time = System.currentTimeMillis() - time; System.out.printf("%18s:%6dms\n","arry_list_insert",time); /*list remove index*/ time = System.currentTimeMillis(); for(int i = 0 ; i<TestNum ; i++){ link_list.remove(i); } time = System.currentTimeMillis() - time; System.out.printf("%18s:%6dms\n","link_list_remove",time); time = System.currentTimeMillis(); for(int i = 0 ; i<TestNum ; i++){ array_list.remove(i); } time = System.currentTimeMillis() - time; System.out.printf("%18s:%6dms\n","array_list_remove",time); System.out.printf("%18s:%8d\n","link_list_size",link_list.size()); System.out.printf("%18s:%8d\n","array_list_size",array_list.size()); link_list = null; array_list = null; System.gc(); } } }
测试结果: Test amount :1000 link_list_add: 15ms array_list_add: 31ms link_list_insert: 0ms arry_list_insert: 0ms link_list_remove: 0ms array_list_remove: 0ms link_list_size: 1000 array_list_size: 1000 Test amount :10000 link_list_add: 16ms array_list_add: 0ms link_list_insert: 1000ms arry_list_insert: 94ms link_list_remove: 750ms array_list_remove: 156ms link_list_size: 10000 array_list_size: 10000 Test amount :100000 link_list_add: 141ms array_list_add: 265ms link_list_insert:186797ms arry_list_insert: 12344ms link_list_remove:178812ms array_list_remove: 28954ms link_list_size: 100000 array_list_size: 100000
发现一个很有趣的现象,在数据比较小的时候LinkedList的执行速度很快,
在数据比较大的时候,很明显的看出ArrayList的执行速度更快,
与自己的想象刚好相反。