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代码分析

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值