首页 > 代码库 > 【Java集合源码剖析】Vector源码剖析

【Java集合源码剖析】Vector源码剖析

转载请注明出处:http://blog.csdn.net/ns_code/article/details/35793865


Vector简介

    Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。

    LinkedList是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。

    LinkedList没有丝线Serializable接口,因此它不支持序列化,实现了Cloneable接口,能被克隆,实现了RandomAccess接口,支持快速随机访问。


Vector源码剖析

    Vector的源码如下(加入了比较详细的注释):

package java.util;  
 
public class Vector<E>  
    extends AbstractList<E>  
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable  
{  
     
    // 保存Vector中数据的数组  
    protected Object[] elementData;  
 
    // 实际数据的数量  
    protected int elementCount;  
 
    // 容量增长系数  
    protected int capacityIncrement;  
 
    // Vector的序列版本号  
    private static final long serialVersionUID = -2767605614048989439L;  
 
    // Vector构造函数。默认容量是10。  
    public Vector() {  
        this(10);  
    }  
 
    // 指定Vector容量大小的构造函数  
    public Vector(int initialCapacity) {  
        this(initialCapacity, 0);  
    }  
 
    // 指定Vector"容量大小"和"增长系数"的构造函数  
    public Vector(int initialCapacity, int capacityIncrement) {  
        super();  
        if (initialCapacity < 0)  
            throw new IllegalArgumentException("Illegal Capacity: "+  
                                               initialCapacity);  
        // 新建一个数组,数组容量是initialCapacity  
        this.elementData = http://www.mamicode.com/new Object[initialCapacity];  >

几点总结

    Vector的源码实现总体与ArrayList类似,关于Vector的源码,给出如下几点总结:

    1、Vector有四个不同的构造方法。无参构造方法的容量为默认值10,仅包含容量的构造方法则将容量增长量(从源码中可以看出容量增长量的作用,第二点也会对容量增长量详细说)明置为0。

    2、注意扩充容量的方法ensureCapacityHelper。与ArrayList相同,Vector在每次增加元素(可能是1个,也可能是一组)时,都要调用该方法来确保足够的容量。当容量不足以容纳当前的元素个数时,就先看构造方法中传入的容量增长量参数CapacityIncrement是否为0,如果不为0,就设置新的容量为就容量加上容量增长量,如果为0,就设置新的容量为旧的容量的2倍,如果设置后的新容量还不够,则直接新容量设置为传入的参数(也就是所需的容量),而后同样用Arrays.copyof()方法将元素拷贝到新的数组。

    3、很多方法都加入了synchronized同步语句,来保证线程安全。

    4、同样在查找给定元素索引值等的方法中,源码都将该元素的值分为null和不为null两种情况处理,Vector中也允许元素为null。

    5、其他很多地方都与ArrayList实现大同小异,Vector现在已经基本不再使用。