Java Vector底层实现原理源码详细分析Jdk8

从下面的代码中可以看出代码块跟ArrayList的Add方法很像,只是加了一个syncronized关键字。

public synchronized boolean add(E e) {
        modCount++;
        ensureCapacityHelper(elementCount + 1);
        elementData[elementCount++] = e;
        return true;
}
public synchronized E get(int index) {
        if (index >= elementCount)
            throw new ArrayIndexOutOfBoundsException(index);

        return elementData(index);
}

同步

它的实现与ArrayList类似,但是使用了synchronized进行同步

扩容

protected int capacityIncrement;// 这里是int类型,扩容的时候不是算比例,而是直接跟capacityIncrement相加。

Vector的构造函数可以传入acpacityIncrement参数,它的作用是在扩容时使数组容增加acpacityIncrement。如果这个参数的值小于等于0,扩容时每次对令capacity为原来的两倍。

与ArrayList比较

  • Vector是同步的,因此开销就比ArrayList大,访问速度更慢。最好使用ArrayList而不是Vector,因为同步操作完全可以有程序员自己来控制。
  • Vector每次扩容请求其大小的2倍(也可以通过构造函数设置增长的容量),而ArrayList是1.5倍

代替方案

可以使用Collections.synchronizedList();得到一个线程安全的ArrayList。或者使用CopyOnWriteArrayList

代码分析

可以参考ArrayList代码分析

你可能感兴趣的:(Java集合框架,java)