本文介绍的是jdk1.2后的Vector,如有错误,请指教出来,谢谢
一,Vector的关系图
Vector是一个比较老旧的集合,在目前的开发比较少用到,不过我们也要了解一下它,它和ArrayList差不多,下面请看分析。
二,源码分析
2.1 属性分析
Vector底层也是一个数组的形式,也有自己的扩容机制
2.2构造方法
它有4个构造方法,但是主要讲解其中3个
2.3 add()方法
2.3.1add(E e)
步骤:
- 检查是否需要扩容
- 插入元素
这个方法主要就是干两件事情:1,尝试扩容,2,添加元素
接下来我们看看ensureCapacityHelper()这个方法:
接下来看看grow()对数组的扩容过程
到目前为止,我们可以知道add(E e)的基本实现了:
>>首先去检查一下数组的容量是否足够
>>>>足够,直接添加元素
>>>>不足够,扩容数组
>>>>>>扩容:如是设定扩容大小即为该数值,否则扩容为原来的1倍
>>>>>>第一次扩容后,如果容量还是小于minCapacity,就将容量扩充为minCapacity
2.3.2 add(int index, E element)
步骤:
- 检查角标
- 检查扩容
- 插入元素
以下为add(int index, E element)方法
我们进入insertElementAt()方法看看
2.4 get()
步骤:
- 检查角标
- 返回元素
2.5 set(int index, E element)
步骤:
- 检查角标
- 替代元素
- 返回旧值
2.6 remove(int index)
步骤
- 检查角标
- 计算要移动的个数,并移动
- 将最后一个元素设为null(删除),让gc进行回收
2.7细点说明
- 线程安全:
从上面的构造方法还有增删改查的操作其实我们都发现了,都有这么一个synchronized关键字,就是这个关键字为Vector容器提供了一个安全机制,保证了线程安全。
- 构造方法:
Vector实际上是通过一个数组去保存数据的。当我们构造Vecotr时;使用默认构造函数,默认容量大小是10。
- 增加元素:
当Vector容量不足以容纳全部元素时,Vector的容量会增加。若容量增加系数 大于0,则将容量的值增加“容量增加系数”;否则,将容量大小增加一倍。