比较ArrayList和LinkedList

 

 

 

比较一:添加内容

 

涉及方法: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条数据时,耗时ArrayList < LinkedList

 

 

 

比较二:获取内容

涉及方法: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:索引越后面越慢

 

在移除内容的时候,

根据索引位置在整个集合的前面、中间、后面的不同

ArrayList:差不多

LinkedList:索引越后面越慢

 

 

 

posted on 2016-07-14 19:31  Calvino  阅读(479)  评论(0编辑  收藏  举报

导航