Vector源码

Vector源码

1. Vector属性

//储存Vector元素的数组
protected Object[] elementData;

//Vector元素的数量
protected int elementCount;

//Vector扩容增加的容量
protected int capacityIncrement;

//数组最大的大小
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

从Vector的属性就可以看出,Vector的是由数组实现的,主要通过操作elementData数组来实现。

2. 线程安全

Vector绝大多数的方法都加有synchronized关键字,因此Vector是线程安全的列表。

3. 扩容算法

private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    //如果capacityIncrement>0,每次扩容增加capacityIncrement这么多;否则,容量翻倍
    int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                                     capacityIncrement : oldCapacity);
    // 如果新容量还是小于要求的最小容量,则容量取要求的最小容量
    if (newCapacity - minCapacity < 0)
        newCapacity = minCapacity;
    // 如果新容量大于最大容量,特殊处理
    if (newCapacity - MAX_ARRAY_SIZE > 0)
        newCapacity = hugeCapacity(minCapacity);
    elementData = Arrays.copyOf(elementData, newCapacity);
}

一般情况下,扩容分为两种情况,第一种是初始化Vector指定capacityIncrement,且为正数,则每次扩容增加capacityIncrement;另一种情况是,初始化未指定capacityIncrement,则每次扩容的容量翻倍。

4.大多数的方法实现思路与ArrayList如出一辙

Vector和ArrayList都是操作数组来实现列表,因此其实现的逻辑基本一致。

结论

Vector与ArrayList的底层都是由数组实现,必要时可扩容。都可以类比成一个大小可变的数组,因此可以根据下标查找值,非常高的效率。但是删除或者从中删除节点,需要对很多元素进行修改,效率不是很高。Vector与ArrayList不一样的地方就是Vector大多数的方法加有synchronized关键字,是线程安全的。

相关链接
ArrayList源码:https://blog.csdn.net/weixin_43177753/article/details/122002504



本人萌新一枚,才疏学浅,如有不足之处和错误的地方,还望各位大神指出。
欢迎大家评论讨论,一起进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值