Java基础之ArrayList、Vector与LinkedList的区别

一、ArrayList和LinkedList的大致区别如下:
 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 

 3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

 4.Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。

二、以下写一个案例对ArrayList和LinkedList两者进行测试:

 1、测试两者的增删效率;

private static long addList(List list) {
        long curTime = System.currentTimeMillis();
        for(int i=0;i<Len;i++){
            list.add(0,new Object());
        }
        return System.currentTimeMillis()-curTime;
    }

public static void main(String[] args) {
       System.out.println("这是ArrayList的添加速度:"+addList(new ArrayList()));
       System.out.println("这是LinkedList的添加速度:"+addList(new LinkedList()));
    }                          
结果:
这是ArrayList的添加速度:810
这是LinkedList的添加速度:10                                                                                                                                                                              
 2、测试两者的查询速率;

public static void main(String[] args) {                                                                              
       List ArrayList = addLists(new ArrayList());
       List LinkedList = addLists(new LinkedList());
       System.out.println("这是ArrayList的读取速度:"+timeList(ArrayList));
       System.out.println("这是LinkedList的读取速度:"+timeList(LinkedList));
    }
//先给对应的list对象添加元素;
private static List addLists(List list) {
        for(int i=0;i<Len;i++){
            list.add(0,new Object());
        }
        return list;
    }
    private static long timeList(List list) {
        long curTime = System.currentTimeMillis();
        for(int i=0;i<list.size();i++){
        }
        return System.currentTimeMillis()-curTime;
    }
结果:                                                                                                                                                                                    
这是ArrayList的读取速度:0
这是LinkedList的读取速度:3                                                                                                                                                                                                                                                                                                                                    
三、总结:

 ArrayList内部是使用可増长数组实现的,所以是用get和set方法是花费常数时间的,但是如果插入元素和删除元素,除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动。
 LinkedList是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费常数时间。

 Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销(这里也可以添加一个Vector作一个测试,速率跟ArrayList是一样的,不多做介绍)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值