java.util系列源码解读之Vector

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()方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,291评论 0 16
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,779评论 18 399
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,526评论 0 3
  • 第一,关于阅读。每日的输出是以有大量有效输入的前提的,写作的同时,我想形成规律的阅读习惯,以一周为一个周期...
    战神蓝小枝阅读 2,750评论 0 0