美文网首页
java.util系列源码解读之Vector

java.util系列源码解读之Vector

作者: 4762d2980c91 | 来源:发表于2016-09-01 11:56 被阅读29次

Vector是java中线程安全的list,每个公有方法均被synchronized修饰, 在多线程环境下推荐使用这个类来创建list.与Arraylist在一些区别是:
a. 容量会自动扩充和缩小
b. 容量扩充的大小通过构造方式传入或者默认的两倍

类定义

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable

成员变量

修饰符 变量名 作用
protected int capacityIncrement 扩容大小
protected Object[] elementData 存储数据的数组对象
protected int elementCount list中存储数据的实际容量
protected transient int modCount 继承自AbstractList,记录elementCount变化的次数

构造方式

public Vector(int initialCapacity, int capacityIncrement)
创建一个容量大小为initialCapacity, 每次扩容增加capacityIncrement个位置的vector

public Vector(int initialCapacity)
创建一个容量大小为initialCapacity, 每次扩容到当前容量的两倍

public Vector()
创建一个容量大小为10, 每次扩容到当前容量的两倍

public Vector(Collection<? extends E> c)
从其他Collection创建vector

方法

public synchronized void setSize(int newSize)
设定当前vector的elementCount值, 如果newSize>elementCount,那么多余的位置用null填充,如果newSize<elementCount,那么截断newSize后的元素.

public synchronized void setSize(int newSize) {
    modCount++;
    if (newSize > elementCount) {
        ensureCapacityHelper(newSize);
    } else {
        for (int i = newSize ; i < elementCount ; i++) {
            elementData[i] = null;
        }
    }
    elementCount = newSize;
}

public Enumeration<E> elements()
返回这个vector数据结构的枚举类型表示

public Enumeration<E> elements() {
    return new Enumeration<E>() {
        int count = 0;

        public boolean hasMoreElements() {
            return count < elementCount;
        }

        public E nextElement() {
            // 这个方法的调用仍然会有多线程的问题, 多个线程遍历时,可能不会遍历到所有
            synchronized (Vector.this) {
                if (count < elementCount) {
                    return elementData(count++);
                }
            }
            throw new NoSuchElementException("Vector Enumeration");
        }
    };
}

public synchronized int indexOf(Object o, int index)
从索引index向后搜索o对象的索引位置, ArrayList中无此方法

public synchronized int lastIndexOf(Object o, int index)
从索引index向前搜索o的索引位置

public synchronized E elementAt(int index)
索引index处的对象,对应ArrayList中的get()方法

相关文章

网友评论

      本文标题:java.util系列源码解读之Vector

      本文链接:https://www.haomeiwen.com/subject/ehicettx.html