c++ vector拷贝构造_JDK源码分析-Vector

db3b4cbf10df35fcecf704edeb2e1bbf.png

1. 概述

上文「JDK源码分析-ArrayList」主要分析了 ArrayList 的实现原理。本文分析 List 接口的另一个实现类:Vector。

Vector 的内部实现与 ArrayList 类似,也可以理解为一个「可变数组」。其继承结构如下(省略部分接口):

9d70aef66036e02a95bb73815915a897.png
PS: 由于 Vector 目前使用较少,且官方也推荐在无线程安全的需求时使用 ArrayList 代替 Vector,这里仅研究其实现原理。
stackoverflow 也有相关的讨论:https://stackoverflow.com/questions/1386275/why-is-java-vector-and-stack-class-considered-obsolete-or-deprecated

2. 代码分析

仍然从其构造器入手进行分析。

2.1 构造器

Vector 对外提供四个构造器(内部可以认为是两个),其一:

protected 

与 ArrayList 类似,Vector 内部也维护了一个 Object 类型的数组(elementData)来存储元素(默认初始容量也是 10)。不同的是:Vector 比 ArrayList 的构造器多了一个参数 capacityIncrement,该变量也导致了二者的扩容方式略有不同,后面进行分析。

其二:入参为集合的构造器

public 

2.2 扩容原理分析

我们仍从其 add() 方法入手进行分析:

public 

注意这里的关键字 synchronized。观察可以发现:Vector 内部许多方法都使用了该关键字,这也是 Vector 实现线程安全的方式,简单粗暴!

其扩容方法实现如下:

/**

从这里可以看出,Vector 与 ArrayList 的扩容方式基本一致,只是新容量的计算方式有所不同,这里分析下其新容量大小:

int 

Vector 计算扩容后的新容量时,根据 capacityIncrement 的值可以分为两种情况:

  1. capacityIncrement > 0:新容量 = 旧容量 + capacityIncrement;
  2. capacityIncrement <= 0:新容量 = 旧容量 * 2。

3. 线程安全性

Vector 是线程安全的,它实现线程安全的方式也很简单粗暴:直接在方法上使用 synchronized 关键字进行同步。

4. 小结

  1. 与 ArrayList 类似,Vector 也可以认为是「可变数组」;
  2. 扩容原理与 ArrayList 基本一致,只是新容量计算方式略有不同:指定增长容量时,新容量为旧容量 + 增长容量;否则扩容为旧容量的 2 倍;
  3. 线程安全的,实现方式简单(synchronized);
  4. 当前使用较少,这里仅学习其实现原理。

8c1147a402bb2a174509ff4aba84a0b7.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

除了PS,原来这个也可以轻松实现图像处理!

全世界只有3.14 % 的人关注了爆炸吧知识在我们生活中&#xff0c;常见的图像处理软件有Adobe Photoshop、Adobe Illustrator等。然而&#xff0c;并非只有软件才能实现图像处理&#xff0c;通过编程手段也是能实现的&#xff01;今天&#xff0c;小天将要带着大家走进计算机视觉…

HTML5视频和音频常见的格式,HTML5 音频和视频

HTML5 特性&#xff0c;包括原生音频和视频支持而无需 Flash。HTML5 和 标签让我们给站点添加媒体变得简单。我们只需要设置 src 属性来识别媒体资源&#xff0c;包含 controls 属性让用户可以播放和暂停媒体。嵌入视频下面是在 Web 页面中嵌入视频文件最简单的形式&#xff1a…

北斗三号b1c频点带宽_【导航论坛】北斗三号卫星导航信号及接收策略

原标题&#xff1a;【导航论坛】北斗三号卫星导航信号及接收策略编者按以“5G/GNSS高精度定位与空间数据深度应用”为主题的高峰论坛上&#xff0c;来自清华大学的陆明泉教授为与会代表带来了题为《北斗三号卫星导航信号及接收策略》的主题报告。陆教授首先对报告的题目作了一个…

下雨天纵使少了什么也是少不了一把伞的&#xff0c;即使是几千年前&#xff0c;也不管细雨霏霏&#xff0c;大雨倾盆。愿意沐浴风雨中&#xff0c;享受这样惠泽的人总是少的。从“孤舟蓑笠翁&#xff0c;独钓寒江雪”&#xff0c;“十里一长亭&#xff0c;五里一短亭”&#xf…

oracle用户名密码过期引起的网站后台无法登录

本来今天休息&#xff0c;但是接到同事反映&#xff1a;客户的WEB无法登录了&#xff0c;网站能打开&#xff0c;但是后台登录不了。我就联系了客户&#xff0c;客户说是WEB用户的密码过期导致的&#xff0c;默认是180天到期。接着就是我的操作流程了&#xff1a;1.先从WEB服务…

微服务的终极目标,Mecha分布式运行时之Dapr

1. Mecha 是啥&#xff1f;微服务发展到今天&#xff0c;已经有很多公司多年前已经改造完毕&#xff0c;也有些公司还在路上&#xff0c;微服务的优势&#xff0c;有过了解的朋友应该也都能说出个一二三来&#xff0c;经历过微服务改造的&#xff0c;应该都知道其中的艰辛。单体…

java mina unix client

/Files/nanshouyong326/MinaTest.rar转载于:https://www.cnblogs.com/nanshouyong326/archive/2011/03/15/1985130.html

python input输入多个变量_「Python 秘籍」1.2 解压可迭代对象赋值给多个变量

问题需要从某个可迭代对象中分解出 N 个元素&#xff0c;但是这个可迭代对象的长度可能超过 N&#xff0c;这会导致出现“需要解包的值过多(too many values to unpack)”的异常。解决方案“星号表达式”可以用来解决这个问题。例如&#xff0c;假设开设了一门课程&#xff0c;…

为什么不谈恋爱?

1 存好啦&#xff01;2 这是我看过最形象的小说描写了图自天秀bot3 原来游泳池是这样建的。。4 这谁还舍得拉绳子啊5 铁笼&#xff1a;大哥&#xff0c;给点面子好不好&#xff1f;6 别说&#xff0c;这门给狗子放头还挺合适的7 机器人骑自行车你点的每个赞&#xff0c;我都认真…

jpa 默认生成sql语句_springboot-jpa自动创建数据库表

第一步创建springboot项目&#xff0c;jpa&#xff0c;mysql,代码如下:application.ymlspring:datasource:url: jdbc:mysql://127.0.0.1:3306/springboot_testusername: rootpassword: 514730driver-class-name: com.mysql.jdbc.Driverjpa:hibernate:# 更新或者创建数据表结构d…

html怎么做交互留言,简单html与servlet交互

1.usercheck.htmlhref"../lib/ligerUI/skins/Aqua/css/usertext.css" rel"stylesheet"type"text/css" />填写用户名/>id"verifyButton"/>>2.usertext.css.userClass {border: 1px solid red ;background-image:url(../../…

系出名门Android(7) - 控件(View)之ZoomControls, Include, VideoView, WebView, RatingBar, Tab

[索引页][]系出名门Android(7) - 控件(View)之ZoomControls, Include, VideoView, WebView, RatingBar, Tab, Spinner, Chronometer, ScrollView作者&#xff1a;webabcd介绍在 Android 中使用各种控件(View) ZoomControls - 放大/缩小按钮控件Include - 整合控件VideoView - 视…

使用php最容易犯的11个MySQL错误。

对于大多数web应用来说&#xff0c;数据库都是一个十分基础性的部分。如果你在使用PHP&#xff0c;那么你很可能也在使用MySQL—LAMP系列中举足轻重的一份子。对于很多新手们来说&#xff0c;使用PHP可以在短短几个小时之内轻松地写出具有特定功能的代码。但是&#xff0c;构建…

牛!又一顶级大厂开招.NET,5年35k!

继腾讯阿里百度京东华为招.NET Core后&#xff0c;又一顶级大厂开招.NET Core了&#xff1a;美团上海总部&#xff0c;住宿业务线别样红业务部招.NET开发&#xff0c;25~35k&#xff0c;具体参见【招聘(上海)】美团酒店招聘 .NET 高级开发。大厂遥不可及的认知该放下了&#xf…

六、 跨多个WebService管理Session

当多个WebService的时候&#xff0c;我们要管理它的Session。这个时候我们得依靠ServiceGroupContext保存session信息&#xff1b; 然后在发布WebService的时候&#xff0c;services.xml文件的的service表情的scope就不再说request或是transportsession了&#xff0c; 而是appl…

理科生浪漫起来,谁都顶不住!

全世界只有3.14 % 的人关注了爆炸吧知识和文科常呈现出的诗词歌赋风花雪月不同&#xff0c;理科常常给人一种理性、严肃甚至冰冷的感觉。其实不然&#xff0c;理科中所蕴含的美&#xff0c;非肉眼可窥。在豆瓣话题#理科中的美学#里&#xff0c;我们找到了许多透过数字、显微镜、…

docker 修改阿里镜像源_Jetson Nano 修改源镜像

由于Jeston nano自带的软件源无法更新&#xff0c;因此更换为国内的软件源&#xff0c;本文使用中科大提供的软件源镜像&#xff0c;具体步骤如下&#xff1a;进入Ubuntu系统之后&#xff0c;我们发现使用以下命令&#xff0c;查看ubuntu版本 $ cat /etc/issue 查看Ubuntu系统版…

欧文分校的计算机科学博士,UCI的CS「加州大学欧文分校计算机科学系」

加州大学欧文分校计算机科学系专业研究生阶段开设有以下三个学位项目&#xff0c;分别是&#xff1a;计算机科学硕士(Master of Computer Science)&#xff1a;为期4个学期(quarter)&#xff0c;共需修读11门课程&#xff0c;44个学分&#xff0c;合学费$43,000(2017学年)。要求…

python中数据用折线图表示_用python处理文本数据

用python处理文本数据Q&#xff1a;这篇文章主要讲什么&#xff1f;&#xff21;&#xff1a;这篇文章主要讨论如何用python来做一些简单的文本处理——文本相似度比较。谈起python的自然语言处理&#xff0c;肯定会让人想起NLTK。不过上面这两个任务并不需要NLTK这个库&#x…

智能电网时代的网络空间安全

在去年&#xff0c;虽然能源行业没有入选国家十大产业振兴计划&#xff0c;但是作为国家能源领域的重点——电力&#xff0c;确提出了自己的庞大发展计划。其中&#xff0c;国家电网提出了坚强智能电网的规划&#xff0c;并制定了路线图。什么是智能电网&#xff1f;这里有个比…