Vector底层源码解析
创始人
2025-05-30 09:01:46

Java源码系列:下方连接
http://t.csdn.cn/Nwzed


文章目录

  • 前言
  • 一、Vectro底层源码逐步解析
  • Vector集合总结:发文3个工作日后 up 会把总结放入前言部分,但也诚邀读者总结,可放入评论区


前言

Vector集合总结:发文3个工作日后 up 会把总结放入前言部分,可谓“温故而知新”。


提示:以下是本篇文章正文内容,下面案例可供参考

集合体系继承图
在这里插入图片描述
Vector相对于ArrayList来说,Vector是线程安全的,它的每个方法几乎都加了synchronized关键字,Vector也是基于数组来存储元素的。
在这里插入图片描述
在这里插入图片描述

​​​​​​​​

一、Vectro底层源码逐步解析

还是和上一章的一样,就是换了一个集合。

老规矩,先来到无参构造,里面直接调用this关键字带赋值一个10进去,我们都知道this表示当前对象,也就是在无参构造中,调用了有参构造传了一个10进去。
在这里插入图片描述
可以看到在有参构造又调用了当前对象的另一个有参构造,构造一个具有指定初始容量且容量增量等于零的空向量,我们接着往下走
在这里插入图片描述
往下走,我们就走到了有参构造应该调用的方法,可见使用Vactro即使我们不传入参数也会自动调用到有参构造,上面传了一个 10 和 0 ,过来先拿 initialCapacity和0进行比较,如果小于0就抛出异常,因为我们的数组长度不能为负数。如果没有抛出异常将 10 赋值给 elementData 数组缓冲区(默认是0),执行完这一步我们就有了一个容量为 10 Vectro集合,继续往下走最后一步this.capacityIncrement = capacityIncrement; 这表示数组的容量增量,调用有参构造是传的 10,0 所以容量增量是 0
在这里插入图片描述
在这里插入图片描述

有了 长度为10的集合 然后往下走 add 方法,还是会先自动装箱,
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

从自动装箱出来,真正进入 add( ) ,可以看见Vector的add方法有 synchronized关键字修饰,是线程安全的。有线程拿到同步锁后。会先将监视器 modCount++,然后再去调用 ensureCapacityHelper( ) 计算容量看看是否需要扩容,

在这里插入图片描述
调用到 ensureCapacityHelper 方法,拿传过来的 minCapacity和默认的 10 进行比较,如果大于 0 就需要扩容,现在程序肯定是不会去扩容的,所以会一路返回到 add 方法。
在这里插入图片描述
返回到 add 方法,会把 e 的值 放入 elementData[ ] 的 elementCount下标处,elementCount下标是 0 ,等 e 的数据放入后进行 elementCount++,就变成了 1,下次添加元素会让 elementCount + 1去计算容量,不管计算结果如何,最后一路再返回到 add 方法,就会将元素放入 elementCount 的下标位置,由于上次进行了自加一,就会放在下标为 1 的位置,再让 elementCount ++,以便下次的计算容量。
在这里插入图片描述
由于默认数组为 10 ,现在一直没有扩容,我们让程序走到 for循环到11,进行扩容。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

走到扩容的方法,和ArrayList的大同小异,先拿到 lod的值,再用 old加上一个old也就是二倍扩容,但是这里为什么要使用三元表达式,而不去直接加一个 old上去,是因为 capacityIncrement 是用来标记 容量增量 的一个属性,通过三元表达式计算容量增量,如果为 true 大于 0,就使用自定义的容量增量,如果为 false就进行二倍扩容。然后将 old X 2 = 20 赋值给 newCapacity,判断 newCapacity - minCapacity < 0吗?20 - 11肯定大于 0 ,然后直接执行 Arrays.copyOf( ) 进行扩容。

在这里插入图片描述
在这里插入图片描述

Vector集合总结:发文3个工作日后 up 会把总结放入前言部分,但也诚邀读者总结,可放入评论区

相关内容

热门资讯

本地和远程连接Oracle数据... 本地和远程连接Oracle数据库登录的方式 1. 本地Oracle数据库登录的几种方式 (1)使用...
今年1号台风迟迟不来,好事还是... 文/陈溯截至目前,西北太平洋未生成任何热带气旋。今年北半球台风为何集体“迟到”?今年一号台风为何迟迟...
ABAP 调用HTTP上传附件... 1、这篇文章的由来 之前已经发表了《ABAP 调用HTTP上传附件》的文章,详细介绍了...
iperf3 服务端和客户端配... 本文目录1、服务端和客户端配置参数交换过程和状态机变化2、服务端代码调用过程3、客户端代码调用过程4...
SpringBoot集成qua... 第一步创建SpringBoot项目的过程我就不在演示了!自己找找教程吧!...
Redis快速恢复数据 Redis的flushall/flushdb命令可以做数据清除,对于Redis的开发和运维人员有一定...
动词的时态 前言(英语时态的四大难点) 难点一:时&态未分清 你必须要...
【华为OD机试 2023最新 ... 题目描述 放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的数组A),他...
和美药业IPO:年亏超1亿元,... 文 | 医药研究社 港股18A再添一员? 近日,港交所披露,赣州和美药业股份有限公司(以下简称“和...
阿里突然上AI编程大招!AI ... 智东西 作者 | ZeR0 编辑 | 漠影 智东西5月30日报道,短短两周之内,新一波AI编程热潮密...
持续火热!密集限购 今年以来北交所市场行情持续火热,资金加速涌入,多家基金公司出手控制旗下主题基金规模。近期,天弘基金、...
三瑞智能创业板IPO获受理 拟... 上证报中国证券网讯(记者 操子怡)近日,深交所官网显示,南昌三瑞智能科技股份有限公司(以下简称“三瑞...
50个小众且实用的神级网站 昨晚熬了个大夜,终于把我收藏夹里的50个网站整理出来了,话不多说...
伊能静都在卖的水晶,你的玄学宝... 花朵财经观察出品撰文丨学研“不是黄金买不起,而是水晶更具性价比。3、2、1,上链接!”听着主播的甜言...
Android 异形屏设备设置... 问题 由于业务需要,应用需要配置沉浸式界面,但设置全屏时,...
分析| AI智能生图前景几何? 如果说此前的AI绘画是人工智障,“AI不仁,以万物为刍狗”,...
【每日随笔】西游记相关随笔 (... 文章目录一、天庭组织架构二、佛门组织架构三、天庭的盘根错节四、西游记中的人情世故 西游记 和 红楼...
mysql 核心日志 redo... 文章目录 binlogbinlog 设计原理binlog 记录内容binlog 写入策略 redol...
“伽玛刀之王”大医集团赴港IP... 本报(chinatimes.net.cn)记者郭怡琳 于娜 北京报道近日,“伽玛刀之王”西安大医集团...
Python基础(十九):数学... 简介 Python 中数学相关模块,如下所示:模块描述math提供了对 ...
Java之链表(不带头结点,带... 目录 一.链表 1.什么是链表 2.链表的分类  二.不带头结点单向链表的非递归实现 1.接口的定...
浙大学霸创业23年,干出250... 文 | 杨万里电影《中国合伙人》中有个场景,孟晓骏(邓超饰演)作为当时的一名高材生,他抱着很高的期望...
Docker 常用【基础|镜像... Centos7 下载|安装|配置|卸载 Docker:https://liush.bl...
dmpython win7安装... 系统环境:win7,python3.6,dm8_20230106_x86_win_64...
荣晟环保实控人被采取强制措施 ... 中经记者 陈家运 北京报道5月26日晚间,荣晟环保(603165.SH)公告披露,其于当日收到控股股...
特朗普,又加关税! 当地时间5月30日,美股三大指数盘中突然大幅走低,午后开始有所拉升,最终仅道指艰难翻红。截至收盘,道...
上海证监局副局长赵国富:深化资... 中经记者 罗辑 北京报道2025年陆家嘴论坛召开在即。5月30日,上海市政府举行新闻发布会,介绍20...
“紫金系”狂飙突进:拟分拆黄金... 中经记者 李哲 北京报道 5月26日,紫金矿业(601899.SH、02899.HK)召开董事会,审...
使用anaconda 安装pa... conda create -n paddlespeech python=3.7 cudnn&...
拒做第二个泡泡玛特要做“中国万... 盲盒的故事,资本市场还买账吗?作者|刘钦文编辑|武丽娟LABUBU有多火?从BLACKPINK成员L...