Java集合类之List性能比较

ArrayList/LinkedList/Vector 三者添加元素、删除元素、遍历耗时对比

package com.loongshaw;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

/** * * @author loongshaw * @note 比较ArrayList LinkedList Vector三中类型的列表操作效率 * */
public class ListComparation {

    public static void arrayListTest(int counts){

        long startTime = System.currentTimeMillis();

        List list = new ArrayList();
        Integer obj = Integer.valueOf(1);

        for(int i=0;i<counts;i++){

            list.add(obj);
        }       
        long addTime = System.currentTimeMillis();

        for(int k=0;k<counts;k++){

            list.get(k);
        }   

        /** Iterator iter = list.iterator(); while(iter.hasNext()){ iter.next(); } **/

        long getTime = System.currentTimeMillis();

        for(int j=0;j<counts;j++){

            list.remove(obj);
        }   

        long deleteTime = System.currentTimeMillis();

        System.out.println("ArrayList 添加"+counts+"个对象耗时"+(addTime-startTime)+",遍历耗时:"+(getTime-addTime)+",删除耗时:"+(deleteTime-getTime));
    }

    public static void linkedListTest(int counts){

        long startTime = System.currentTimeMillis();

        LinkedList list = new LinkedList();

        Integer obj = Integer.valueOf(1);

        for(int i=0;i<counts;i++){

            list.addLast(obj);
        }       
        long addTime = System.currentTimeMillis();

        for(int k=0;k<counts;k++){

            list.getFirst();
        }   

        /** Iterator iter = list.iterator(); while(iter.hasNext()){ iter.next(); } **/

        long getTime = System.currentTimeMillis();

        for(int j=0;j<counts;j++){

            list.remove(obj);
        }   

        long deleteTime = System.currentTimeMillis();

        System.out.println("LinkedList 添加"+counts+"个对象耗时"+(addTime-startTime)+",遍历耗时:"+(getTime-addTime)+",删除耗时:"+(deleteTime-getTime));
    }

    public static void vectorTest(int counts){

        long startTime = System.currentTimeMillis();

        List list = new Vector();

        Integer obj = Integer.valueOf(1);

        for(int i=0;i<counts;i++){

            list.add(obj);
        }       
        long addTime = System.currentTimeMillis();

        for(int k=0;k<counts;k++){

            list.get(k);
        }   

        /** Iterator iter = list.iterator(); while(iter.hasNext()){ iter.next(); } **/

        long getTime = System.currentTimeMillis();

        for(int j=0;j<counts;j++){

            list.remove(obj);
        }   

        long deleteTime = System.currentTimeMillis();

        System.out.println("Vector 添加"+counts+"个对象耗时"+(addTime-startTime)+",遍历耗时:"+(getTime-addTime)+",删除耗时:"+(deleteTime-getTime));        
    }

    public static void main(String[] args){

        int counts = 10000;

        arrayListTest(counts);

        linkedListTest(counts);

        vectorTest(counts);
    }
}

操作1万个数据

时间单位:毫秒

ArrayList 添加10000个对象耗时1,遍历耗时:0,删除耗时:8
LinkedList 添加10000个对象耗时1,遍历耗时:1,删除耗时:1
Vector 添加10000个对象耗时1,遍历耗时:2,删除耗时:8

操作10万个数据

时间单位:毫秒

ArrayList 添加100000个对象耗时4,遍历耗时:2,删除耗时:843
LinkedList 添加100000个对象耗时4,遍历耗时:2,删除耗时:4
Vector 添加100000个对象耗时5,遍历耗时:5,删除耗时:823

操作100万个数据

时间单位:毫秒

ArrayList 添加1000000个对象耗时17,遍历耗时:4,删除耗时:125005
LinkedList 添加1000000个对象耗时69,遍历耗时:3,删除耗时:9
Vector 添加1000000个对象耗时10,遍历耗时:8,删除耗时:119343

对比数据

操作1万个数据

集合类遍历
ArrayList180
LinkedList111
Vector182

操作10万个数据

集合类遍历
ArrayList48432
LinkedList442
Vector58235

操作100万个数据

集合类遍历
ArrayList171250054
LinkedList6993
Vector101193438

测试环境

jdk8+eclipse+macpro

结论

根据耗时表格, 我们可以判断何时该用ArrayList,何时该用LinkedList.

总的来说, LinkedList更适用于:

  • 大量的增加/删除操作

ArrayList和Vector两者操作性能差异不大,但ArrayList适合开发者自由控制其同步状态。

转载于:https://my.oschina.net/abcijkxyz/blog/724878

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值