List --- Vector源码分析

本文介绍的是jdk1.2后的Vector,如有错误,请指教出来,谢谢

一,Vector的关系图List --- Vector源码分析_第1张图片

Vector是一个比较老旧的集合,在目前的开发比较少用到,不过我们也要了解一下它,它和ArrayList差不多,下面请看分析。

 

二,源码分析

2.1 属性分析

List --- Vector源码分析_第2张图片

Vector底层也是一个数组的形式,也有自己的扩容机制

 

2.2构造方法

它有4个构造方法,但是主要讲解其中3个

List --- Vector源码分析_第3张图片

 

2.3 add()方法

List --- Vector源码分析_第4张图片

2.3.1add(E e)

步骤:

  • 检查是否需要扩容
  • 插入元素

List --- Vector源码分析_第5张图片

这个方法主要就是干两件事情:1,尝试扩容,2,添加元素

接下来我们看看ensureCapacityHelper()这个方法:

List --- Vector源码分析_第6张图片

接下来看看grow()对数组的扩容过程

List --- Vector源码分析_第7张图片

到目前为止,我们可以知道add(E e)的基本实现了:

>>首先去检查一下数组的容量是否足够

>>>>足够,直接添加元素

>>>>不足够,扩容数组

>>>>>>扩容:如是设定扩容大小即为该数值,否则扩容为原来的1倍

>>>>>>第一次扩容后,如果容量还是小于minCapacity,就将容量扩充为minCapacity

 

2.3.2 add(int index, E element)

步骤:

  • 检查角标
  • 检查扩容
  • 插入元素

 

以下为add(int index, E element)方法

List --- Vector源码分析_第8张图片

我们进入insertElementAt()方法看看

List --- Vector源码分析_第9张图片

 

2.4 get()

步骤:

  • 检查角标
  • 返回元素

List --- Vector源码分析_第10张图片

2.5  set(int index, E element)

步骤:

  • 检查角标
  • 替代元素
  • 返回旧值

List --- Vector源码分析_第11张图片

 

2.6 remove(int index)

步骤

  • 检查角标
  • 计算要移动的个数,并移动
  • 将最后一个元素设为null(删除),让gc进行回收

List --- Vector源码分析_第12张图片

 

2.7细点说明

  • 线程安全:

从上面的构造方法还有增删改查的操作其实我们都发现了,都有这么一个synchronized关键字,就是这个关键字为Vector容器提供了一个安全机制,保证了线程安全。

  • 构造方法:

Vector实际上是通过一个数组去保存数据的。当我们构造Vecotr时;使用默认构造函数,默认容量大小是10。

  • 增加元素:

当Vector容量不足以容纳全部元素时,Vector的容量会增加。若容量增加系数 大于0,则将容量的值增加“容量增加系数”;否则,将容量大小增加一倍。

 

 

 

 

 

 

你可能感兴趣的:(源码分析,vector,vector源码解析,vector源码分析)