ArrayList 与 LinkedList 增加数据与查询数据的效率对比

         ArrayList    与 LinkedList 都是list的实现 类,前者是基于数组实现,具有查询快增删慢的特点,后者是基于双向链表实现,具有查询慢增删快的特点,对于查询与增删来说,二者正好相反,那二者到底相差多少

下面我们来测试下,

先上代码,所有代码如下

package com.test.list;
import java.util.*;
/**
 * @ClassName ListDemo
 * @Description TODO
 * @Date 2018/11/20/02015:29
 * @Version 1.0
 **/
public class ListDemo {
    public static void main(String[] args) {
        int baseSize = 10000;
        int baseGet = 100;
       // addListXiaoLv(2000*baseSize);
       //  addLinkListXiaoLv(2000*baseSize);
       // getListXiaoLv(2000*baseSize,baseGet);
       // getLinkListXiaoLv(2000*baseSize,baseGet);

    }

    /**
     * 增加list数据
     * @param size
     */
    public static void addListXiaoLv(int size){
        List list = new ArrayList(size);
        Long listStart = System.currentTimeMillis();
        for (int i =0;i<size;i++){
            list.add(i);
        }
        Long listEnd = System.currentTimeMillis();
        System.out.println(" ArrayList 增加时间" +(listEnd-listStart));

    }

    /**
     * 增加LinkList的数据
     * @param size
     */
    public static void addLinkListXiaoLv(int size){
        List list = new LinkedList();
        Long listStart = System.currentTimeMillis();

        for (int i =0;i<size;i++){
            list.add(i);
        }
        Long listEnd = System.currentTimeMillis();
        System.out.println(" LinkedList 增加时间" +(listEnd-listStart));

    }

    /**
     * 随机获取 list中的数据
     * @param size
     * @param get
     */
    public static void getListXiaoLv(int size,int get){
        List list = new ArrayList();
        for (int i =0;i<size;i++){
            list.add(i);
        }
        List getlist = new ArrayList();
        Long listStart = System.currentTimeMillis();
        for (int i = 0; i<get;i++){
            getlist.add(list.get(new Random().nextInt(size)));
        }
        Long listEnd = System.currentTimeMillis();
        System.out.println(" ArrayList 获取时间" +(listEnd-listStart));
        System.out.println("list .size" +list.size());
        System.out.println("getlist .size" +getlist.size());

    }

    /**
     * 随机获取 LinkList中的数据
     * @param size
     * @param get
     */
    public static void getLinkListXiaoLv(int size,int get){
        List list = new LinkedList();
        List getlist = new LinkedList();
        for (int i =0;i<size;i++){
            list.add(i);
        }
        Long listStart = System.currentTimeMillis();
        for (int i =0;i<get;i++){
            getlist.add(list.get(new Random().nextInt(size)));
        }
        Long listEnd = System.currentTimeMillis();
        System.out.println(" LinkedList 获取时间" +(listEnd-listStart));
        System.out.println("list .size" +list.size());
        System.out.println("getlist .size" +getlist.size());
    }
}

 

       数据增加以万为基本单位,分别有 万,10万,100万,1000万,2000万

     由于ArrayList可以初始size,并分别以初始化和未初始化做了性能对比

     查询数据分别从万,10万,100万,1000万,2000万 中随机获取100条

具体耗时与性能比较如下,

注:  所有结果统计单位为毫秒,性能对比有正负之分,正为性能提升,负为性能降低

    

 增加数据
 ArrayListLinkedList
数据量  未初化size(变量A)初始化size(变量B)初始化的性能提升((A-B)/A * 100%)不能初始化(变量C)与未size的arrayList比((A-C)/A * 100%)与已size的arrayList比((B-C)/B * 100%)
1万220200
10万8712%80-15%
100万322230%42-30%-90%
1000万40025736%6891-1600%-2500%
2000万48735635-16%15827-200%-180%
       
 查询数据(随机查询100)
       
1万1104-300%-300%
10万11013-1200%-1200%
100万110104-10300%-10300%
1000万1101865-186400%-186400%
2000万0004908..............

 

       根据文中开始的总结,要想查询快用Arrylist,增加快用LinkedList,但是实际测试结果,无论做什么,都Arrylist快

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值