码迷,mamicode.com
首页 > 其他好文 > 详细

比较ArrayList和LinkedList

时间:2016-07-14 21:11:51      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:

 

 

 

比较一:添加内容

 

涉及方法:add

 

    public void add_test(){
        List<Person> addlist = new ArrayList<Person>();
        Person p = new Person("阿呆",20);
long begin = System.currentTimeMillis(); System.out.println("ArrayList 开始时间:"+begin); for(int i=0; i<10000000; i++){ addlist.add(p); // System.out.println("第"+i+"个"+"所用时间:"+(System.currentTimeMillis()-begin)); } long over = System.currentTimeMillis(); System.out.println("ArrayList 结束时间:"+over); System.out.println("ArrayList 最终时间:"+(over-begin)); }

注:这是ArrayList的测试代码,但是测LinkedList只要把addlist的类型改一下就行,改成LinkedList

结果:

 

ArrayList

 技术分享

 

LinkedList

技术分享

 

显然在插入10000000条数据时,耗时LinkedList>ArrayList

 

 

 

比较二:获取内容

涉及方法:get、contains、indexOf、lastIndexOf

 

1、get测试

    public void get_test(){
        
        //准备工作,添加一堆阿呆,添加一个阿傻
        List<Person> getlist = new ArrayList<Person>();
        Person p = new Person("阿呆",20);
        for(int i=0; i<10000000; i++){
            getlist.add(p);
        }
        Person p2 = new Person("阿傻",20);
        getlist.add(77777,p2);
        System.out.println("添加完成");
        
        
        // get 测试
        long begin = System.currentTimeMillis();
        System.out.println("get测试开始时间:"+begin);
        getlist.get(7777777);
        long over = System.currentTimeMillis();
        System.out.println("get测试结束时间:"+over);
        System.out.println("get测试最终时间:"+(over-begin));
   }    

结果

ArrayList

技术分享

LinkedList

技术分享

 

 

 

2、contains测试

        // contains 测试
        long begin = System.currentTimeMillis();
        for(int i=0; i<10000; i++){
            getlist.contains(p2);
        }
        long over = System.currentTimeMillis();
        System.out.println("contains测试最终时间:"+(over-begin));

注:只要把上面测试add的那段代码换成这段,就可以测试contains,准备工作的代码不变

结果

ArrayList

技术分享

LinkedList

技术分享

 

 

 

3、indexOf测试

        // indexOf 测试
        long begin = System.currentTimeMillis();
        for(int i=0; i<10000; i++){
            getlist.indexOf(p2);
        }
        long over = System.currentTimeMillis();
        System.out.println("indexOf测试最终时间:"+(over-begin));

结果

ArrayList

技术分享

LinkedList

技术分享

 

 

 

4、lastIndexOf测试

        // lastIndexOf 测试
        long begin = System.currentTimeMillis();
        for(int i=0; i<100; i++){
            getlist.lastIndexOf(p2);
        }
        long over = System.currentTimeMillis();
        System.out.println("lastIndexOf 测试最终时间:"+(over-begin));

结果

ArrayList

技术分享

LinkedList

技术分享

 

 

小结:

get:ArrayList < LinkedList,差别很大

contains:ArrayList < LinkedList,差别不那么大,以下两个也是

indexOf:ArrayList < LinkedList

lastIndexOf:ArrayList < LinkedList

 

 

 

比较三:删除内容

 

涉及方法:remove(根据索引)、remove(根据对象)

 

 

1、remove(根据索引)

    public void remove_test(){
        
        //准备工作,添加一堆阿呆
        List<Person> getlist = new ArrayList<Person>();
        Person p = new Person("阿呆",20);
        for(int i=0; i<10000000; i++){
            getlist.add(p);
        }
        System.out.println("添加完成");
        
        
        // remove(int index)  测试
        System.out.println(getlist.size());
        long begin = System.currentTimeMillis();
        for(int i=0; i<10000000; i++){
            getlist.remove(getlist.size()-1);
        }
        long over = System.currentTimeMillis();
        System.out.println("remove(int index)  测试最终时间:"+(over-begin));
        System.out.println(getlist.size());
  }

结果

ArrayList

技术分享

LinkedList

技术分享

 

 

 

2、remove(根据对象)

        // remove(Object o)   测试
        System.out.println(getlist.size());
        long begin = System.currentTimeMillis();
        for(int i=0; i<999; i++){
            getlist.remove(p);
        }
        long over = System.currentTimeMillis();
        System.out.println("remove(Object o)   测试最终时间:"+(over-begin));
        System.out.println(getlist.size());

结果

ArrayList

技术分享

LinkedList

技术分享

 

 

 

小结:

remove(根据索引):ArrayList < LinkedList,差别不大

remove(根据对象):ArrayList > LinkedList,差别非常大

 

 

 

 

 

 

 进一步

 

在插入内容时候:根据有无指定插入位置

ArrayList

 

技术分享

 

LinkedList

技术分享

 

 

在获取内容的时候,根据索引位置在整个集合的前面、中间、后面的不同

 

ArrayList

技术分享

 

LinkedList

技术分享

 

 

在移除内容的时候,根据索引位置在整个集合的前面、中间、后面的不同

 

 

ArrayList

技术分享

 

LinkedList

技术分享

 

 

 

小结:

在插入内容时候:根据有无指定插入位置,

ArrayList:有索引更慢

LinkedList:差不多

 

在获取内容的时候,根据索引位置在整个集合的前面、中间、后面的不同

ArrayList:差不多

LinkedList:索引越后面越慢

 

在移除内容的时候,根据索引位置在整个集合的前面、中间、后面的不同

ArrayList:差不多

LinkedList:索引越后面越慢

 

 

 

比较ArrayList和LinkedList

标签:

原文地址:http://www.cnblogs.com/Calvino/p/5671508.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!