首页 > 代码库 > JDK源码学习系列06----Vector

JDK源码学习系列06----Vector

                                            JDK源码学习系列06----Vector

1.Vector简介

    Vector的内部是数组实现的,它和ArrayList非常相似,最大的不同就是 Vector 是线程安全(同步)的。

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
   Vector继承于AbstractList,实现了List, RandomAccess, Cloneable,java.io.Serializable这些接口。
   Vector 继承了AbstractList,实现了List ,支持相关的添加、删除、修改、遍历等功能。
   Vector 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在Vector    中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。
   Vector 实现了Cloneable接口,即实现clone()函数。它能被克隆。


2.Vector的成员变量

    protected Object[] elementData;//内部实现数组
    protected int elementCount;//vector内容的实际长度
    protected int capacityIncrement;//容量递增值
    private static final long serialVersionUID = -2767605614048989439L;//序列id


3.Vector的构造函数

    public Vector(int initialCapacity, int capacityIncrement) {
 	super();
        if (initialCapacity < 0)//若容量递增值小于0,则抛出异常
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
	this.elementData = http://www.mamicode.com/new Object[initialCapacity];//elementData数组,容量为initialCapacity>


4.Vector的成员函数

很多成员函数都用synchronized关键字修饰了的,即表示是同步的,线程安全的。关于synchronized关键字,请见:java  synchronized  关键字

    public synchronized void copyInto(Object[] anArray) {//把Vector复制到anArray数组中
	System.arraycopy(elementData, 0, anArray, 0, elementCount);//数组的复制都是用的System.arraycopy(),Arrays.copyof()的内部也是用的System.arraycopy().
    }
 
    public synchronized void trimToSize() {//把容量缩小到刚好等于vector的实际长度
	modCount++;//!!线程安全的类的源码中也有统计结构变化次数的modCount
	int oldCapacity = elementData.length;
	if (elementCount < oldCapacity) {
            elementData = http://www.mamicode.com/Arrays.copyOf(elementData, elementCount);>


5.总结

a.Vector的内部是数组实现的。

b.Vector是线程安全(同步)的。

c.Vector默认长度为10,扩容时需要参考容量增幅值,若容量增幅值大于0,则扩容为 原容量+容量增幅值;若容量增幅值小于    0,则扩容为 2*原容量。若根据容量增幅值扩容后       还是小于传入的新容量参数值,则容量扩为传入的新参数。