Java常用集合之Vector(深入源码)

目录

(1)Vector概述

(2)Vector特点

(3)源码分析

(1)成员变量

(2)构造函数

(3)add方法


(1)Vector概述

Vector和ArrayList一样,都是通过数组实现的,但是Vector是线程安全的,这也导致它的效率不如ArrayList。

(2)Vector特点

  • 和ArrayList相比,其中的很多方法都通过同步(synchronized)处理来保证线程安全。

  • 如果涉及到多线程,那么就选择Vector(当然,也可以使用ArrayList并自己实现同步,但不推荐)。

  • 如果不涉及到线程安全问题,那么使用ArrayList是更好的选择(因为Vector使用synchronized,必然会影响效率)。

  • 二者的扩容策略不一样

    Vector默认情况下自动扩容到原先的2倍,而ArrayList扩容到原先的1.5倍。

(3)源码分析

Vector特点:

  • 没有无参构造懒分配空间的机制
  • 所有的方法都是synchronized

(1)成员变量

elementData:存储用的数组

elementCount:当前集合的元素个数

capacityIncrement:扩容的增量

(2)构造函数

无参构造

调用了一个有参构造,实例化一个初始容量为10的Vector

有参构造:指定初始容量

调用了另一个有参构造,指定扩容增量为0

有参构造:指定初始容量和扩容增量

 

创建一个指定容量的Object数组,设置扩容增量。

ArrayList和Vector构造器的区别

ArrayList的无参构造不会分配数组空间,在第一次添加元素时才会分配默认的10个空间。

而Vector的无参构造,立马会创建默认的10个数组空间。

(3)add方法

注意,此方法是synchronized修饰的同步方法

调用ensureCapacityHelper()方法,进行扩容检测,然后将元素放入数组的指定索引。

如果最小需求容量比当前集合的长度大,调用grow()方法进行扩容: 

扩容的策略有所不同:如果扩容增量>0,就每次额外增加“扩容增量”个空间。否则就每次将容量翻一倍。扩容增量默认为0

其余的扩容细节和ArrayList完全一致

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值