List --- Vector源码分析

本文介绍的是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,则将容量的值增加“容量增加系数”;否则,将容量大小增加一倍。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江边小子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值