ArrayList和LinkedList区别

来源:互联网 发布:win8.1和ubuntu双系统 编辑:程序博客网 时间:2024/06/16 02:16

1.ArrayList是实现了基于动态数组(Object[])的数据结构,LinkedList基于链表的数据结构(Node)。 

2.ArrayList初始长度为10,扩容后为1.5*oldCapacity。

3.ArrayList的空间浪费主要体现在扩容后结尾会预留一定的容量空间(可以调用trimSize),LinkedList空间花费体现在它的每个元素新建都需要一定的空间(new Node对象)

4.对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。

5.插入数据时,如果是在集合的前段(大概集合容量的前1/10)处插入数据时,LinkedList性能明显优于ArrayList

当在集合的中部甚至靠后的位置插入大量数据时,ArrayList的性能反而远远优于LinkedList

结论:Linkedlist相较于ArrayList的唯一优势在于集合前段的数据的插入。

具体Demo:

/** * Created by flh on 2017/8/28. */import java.util.*;public class ArrayOrLinked {    static List<Integer> array=new ArrayList<Integer>();    static List<Integer> linked=new LinkedList<Integer>();    public static long getTime(List list){        long time=System.currentTimeMillis();        for(int i=0;i<10000;i++){            int index=Collections.binarySearch(list, list.get(i));            if(index!=i){                System.out.println("ERROR!");            }        }        return System.currentTimeMillis()-time;    }    public static long insertTime(List list){        long time=System.currentTimeMillis();        for(int i=1000;i<10000;i++){            list.add(1000, i);        }        return System.currentTimeMillis()-time;    }    public static void main(String[] args) {        for(int i=0;i<10000;i++){            array.add(i);            linked.add(i);        }        System.out.println("array time:"+getTime(array));        System.out.println("linked time:"+getTime(linked));        System.out.println("array insert time:"+insertTime(array));        System.out.println("linked insert time:"+insertTime(linked));    }}

注意insertTime方法中:

list.add(1000, i);

在十分之一处进行插入,运行结果为:

array time:4linked time:258array insert time:26linked insert time:19

在前部分插入,效率LinkedList>ArrayLsit

代码改为:

list.add(5000, i);

在二分之一处进行插入,运行结果为:

array time:3linked time:249array insert time:18linked insert time:90

在中部及后半部分插入,效率ArrayLsit>LinkedList

原创粉丝点击