容器学习十:Vector & ArrayList & LinkedList

一.前言

  1. 以前对Vector这对象很陌生,用的少,对象的名字(Vector矢量,向量)也让人摸不着头脑,以为是什么新东西...
  2. 前文已经学习了ArrayList和LinkedList的源码,原本打算写个Vector源码分析的,但看了一下,Vector和ArrayList一样啊,于是作罢。本文就简单的对比下这三种List。

二.Vector & ArrayList

  1. Vector线程安全,所有的方法都synchronized。ArrayList线程不安全,裸奔。
  2. 扩容
    //ArrayList
    public void ensureCapacity(int minCapacity) {
    	modCount++;
    	int oldCapacity = elementData.length;
    	if (minCapacity > oldCapacity) {
    	    Object oldData[] = elementData;
                //直接扩到(oldCapacity * 3)/2 + 1
    	    int newCapacity = (oldCapacity * 3)/2 + 1;
        	    if (newCapacity < minCapacity)
    		newCapacity = minCapacity;
                // minCapacity is usually close to size, so this is a win:
                elementData = Arrays.copyOf(elementData, newCapacity);
    	}
     }
    
    //Vector
    private void ensureCapacityHelper(int minCapacity) {
    	int oldCapacity = elementData.length;
    	if (minCapacity > oldCapacity) {
    	    Object[] oldData = elementData;
                //当数组溢出时容量增加的量capacityIncrement,Vector构造函数里指定
                //扩到oldCapacity + capacityIncrement或者oldCapacity * 2
    	    int newCapacity = (capacityIncrement > 0) ?
    		(oldCapacity + capacityIncrement) : (oldCapacity * 2);
        	    if (newCapacity < minCapacity) {
    		newCapacity = minCapacity;
    	    }
                elementData = Arrays.copyOf(elementData, newCapacity);
    	}
    }
    
    
    
  3. 版本:Vector和Hashtable一样,所以jdk1.0就有的东西,代码质量一般。ArrayList在1.2里面出现。
  4. 命名:习惯ArrayList。比喻Vector removeElementAt(int index),而ArrayList remove(int index)。

三.ArrayList & LinkedList

  1. ArrayList内部用数组实现,LinkedList内部用双向链表实现。
  2. ArrayList遍历元素效率高,LinkedList插入删除元素效率高。
  3. 但问题不是绝对的,还是那句话,不同场景使用适合自己的数据结构。

四.PS

     超无技术含量的文章,欢迎拍砖,欢迎点评,让我发现Vector & ArrayList & LinkedList还有什么能让我眼前一亮的东西。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值