Java中ArrayList和LinkedList效率

来源:互联网 发布:福建师范大学软件学院 编辑:程序博客网 时间:2024/06/07 01:56

开发中常用list集合,但是一直不清楚ArryList和LinkedList的效率有何区别,所以今天写了点demo,做个记录

1.直接遍历整个集合

import java.util.ArrayList;import java.util.LinkedList;import java.util.List;public class ListTest{    public static void main(String[] args)    {        List<String> arrayList = new ArrayList<String>();        List<String> linkedList = new LinkedList<String>();        for(int i = 0; i < 10000000; i++)        {            arrayList.add("a");            linkedList.add("a");        }        long startArray = System.currentTimeMillis();        for(String a : arrayList)        {            if("b".equals(a))            {                System.out.println(a);            }        }        System.out.println("arrayList耗时:"+(System.currentTimeMillis()-startArray));        long startLinked = System.currentTimeMillis();        for(String b : linkedList)        {            if("b".equals(b))            {                System.out.println(b);            }        }        System.out.println("linkedList耗时:"+(System.currentTimeMillis()-startLinked));    }}
执行结果:

arrayList耗时:106
linkedList耗时:169

给list集合放入10000000个字符串,简单遍历,ArrayList的效率明显优于LinkedList

2.在list开头插入数据

import java.util.ArrayList;import java.util.LinkedList;import java.util.List;public class ListTest{    public static void main(String[] args)    {        List<String> arrayList = new ArrayList<String>();        List<String> linkedList = new LinkedList<String>();        for(int i = 0; i < 100000; i++)        {            arrayList.add("a");            linkedList.add("a");        }        long startArray = System.currentTimeMillis();        for(int i = 0; i < 100000; i++)        {            arrayList.add(0,"b");        }        System.out.println("arrayList耗时:"+(System.currentTimeMillis()-startArray));        long startLinked = System.currentTimeMillis();        for(int i = 0; i < 100000; i++)        {            linkedList.add(0,"b");        }        System.out.println("linkedList耗时:"+(System.currentTimeMillis()-startLinked));    }}
执行结果

arrayList耗时:11411
linkedList耗时:19

给list集合放入100000个字符串,在list开头分别插入同样的100000个字符串,LinkedList效率明显优于ArrayList,相差很大
3.同2一样的代码,在List集合中间位置(第50000处)插入100000个字符串,执行结果:

arrayList耗时:3960
linkedList耗时:21210

在List集合中间位置(第50000处)插入100000个字符串,ArrayList的执行效率反而高于LinkedList。说明和位置是有关系的。

4.在list结尾添加数据

import java.util.ArrayList;import java.util.LinkedList;import java.util.List;public class ListTest{    public static void main(String[] args)    {        List<String> arrayList = new ArrayList<String>();        List<String> linkedList = new LinkedList<String>();        for(int i = 0; i < 100000; i++)        {            arrayList.add("a");            linkedList.add("a");        }        long startArray = System.currentTimeMillis();        for(int i = 0; i < 10000000; i++)        {            arrayList.add("b");        }        System.out.println("arrayList耗时:"+(System.currentTimeMillis()-startArray));        long startLinked = System.currentTimeMillis();        for(int i = 0; i < 10000000; i++)        {            linkedList.add("b");        }        System.out.println("linkedList耗时:"+(System.currentTimeMillis()-startLinked));    }}

执行结果

arrayList耗时:205
linkedList耗时:5110

给list集合放入100000个字符串,在list结尾分别插入同样的10000000个字符串,同3一样,ArrayList的执行效率高于LinkedList

从上边看出,如果对list只是简单遍历、插入,还是使用ArrayList比较好。只有在list头部插入数据时,LinkedList效率更好。具体的使用那种List,还需要根据项目的实际情况来选择。

另外,在网络上说在容器前1/10处插入数据时,linkedlist性能明显优于arraylist,因为没有项目实际应用场景,我这里没有再写demo测试,有兴趣可以自己本地测试一下。


原创粉丝点击