Java集合(四)Vector底层结构

Java集合(四)Vector底层结构


一、Vector类的基本介绍

1.1、Vector类的定义说明

List接口的实现子类
在这里插入图片描述

1.2、Vector类底层

Vector底层也是Object数组
在这里插入图片描述

1.3、Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized(在开发中,需要线程同步安全时,考虑使用Vector)

在这里插入图片描述

二、Vector和ArrayList的比较

2.1、Vector和ArrayList的比较

1、ArrayList是List的主要实现类,底层使用Object[]存储,适用于频繁的查找工作,线程不安全
2、Vector是List的古老实现类,底层使用的Object[],线程安全的,效率不高。
在这里插入图片描述

三、Vector底层源码

在这里插入图片描述
如果是无参构造器,大小默认为10
在这里插入图片描述
执行到add()方法时,它也会对数值进行一个装箱
在这里插入图片描述
然后再执行add()方法
在这里插入图片描述
ensureCapaciryHelper()
此时参入的数值 minCapacity为1 减去elementData的长度(上面无参构造默认为10)不大于0
所以不会执行grow()方法进行扩容
在这里插入图片描述
执行完上面这个方法返回到add方法,会把参入的数值 直接存入下标为0的位置
在这里插入图片描述
可以看到for循环的vector集合
在这里插入图片描述
这里我for循环了15次 已知new Vector()默认大小为10 当第11次添加会执行扩容
下面minCapacity=11 往下走 11-默认大小10 > 0 执行grow()扩容方法
在这里插入图片描述
进入到grow方法计算分配大小
int newCapacity = oldCapacity + 三元运算符(capacityIncrement >0)? capacityIncrement :oldCapacity
在这里插入图片描述
(capacityIncrement >0)? capacityIncrement :oldCapacity 也就是 0 > 0 ? 0 : 10 结果可想而知为 10
int newCapacity = oldCapacity + (capacityIncrement >0)? capacityIncrement :oldCapacity 10 + 10 20
在这里插入图片描述
在这里插入图片描述
扩容完毕 大小为 10 的 2倍 20
在这里插入图片描述
可以看到 Vectoe集合扩容完毕 大小为20 11 也添加到了下标为10的位置
在这里插入图片描述

有参构造 给定的数值为8
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
往下运行 看看扩容机制
执行了第九次 而数组长度为 8 所以 这个 if语句成立 执行扩容grow方法
在这里插入图片描述
看,这个newCapacity = 16 也就 有参构造传入大小 8 的 二倍
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

胖虎不吃生菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值