从字面上大概可以猜出ArrayList是用数组实现的的一种数据结构;LinkedList采用链表实现。那么要剖析区别的话大概可以概括到数组和链表的区别。结合在数据结构课上所学,我大概可以猜出几点区别,无外乎数组采用连续的内存空间存储数据,链表中用到了引用,那么存储的内容可以不在连续的内存空间里。
以上是假如不会ArrayList和LinkedList的前提下做的假设。实际上两者主要区别有三点。
1.ArrayList是使用动态数组实现的数据结构,LinkedList使用双链表实现
2.ArrayList非常适合于随机读取数据(get,set),而LinkedList因为每次读取数据必须从根节点往后读取,效率会比较慢;
3.对于涉及到插入/删除操作,LinkedList的效率比ArrayList高,因为ArrayList涉及数组的整体移动,而LinkedList只需要简单的更改下一个引用的的位置;
测试代码
1 package util; 2 import java.util.ArrayList; 3 import java.util.LinkedList; 4 import java.util.List; 5 6 public class ListTest { 7 static final int N=60000; 8 public static long[] timeUse(List<Object> list,long[] ls){ 9 int i; 10 long start=System.currentTimeMillis(); 11 Object o = new Object(); 12 for(i=0;i<N;i++) { 13 list.add(o); 14 } 15 ls[0]=System.currentTimeMillis()-start; 16 start=System.currentTimeMillis(); 17 int j=list.size(); 18 for(i=0;i<j;i++){ 19 list.get(i); 20 } 21 ls[1]=System.currentTimeMillis()-start; 22 return ls; 23 } 24 25 public static void main(String[] args) { 26 long[] time = ListTest.timeUse(new ArrayList<Object>(),new long[2]); 27 long[] time1 = ListTest.timeUse(new LinkedList<Object>(), new long[2]); 28 System.out.println("使用ArraysList添加"+N+"条数据花费:"+time[0]+"ms"); 29 System.out.println("使用LinkedList添加"+N+"条数据花费:"+time1[0]+"ms"); 30 System.out.println("使用ArrayList查询"+N+"条数据花费:"+time[1]+"ms"); 31 System.out.println("使用LinkedList查询"+N+"条数据花费:"+time1[1]+"ms"); 32 33 } 34 }
运行结果
说明:本测试代码比较极端,但是大概也反映出了ArrayList和LinkedList的区别。假设条件是插入的位置都是list的第一个位置,查询是按list顺序查询。
时间: 2024-10-09 21:56:25