集合框架----源码解读Vector篇

news2025/2/25 7:20:25

1.vector官方简绍

Vector类实现了一个可增长的对象数组。与数组一样,它包含可以使用整数索引访问的组件。但是,Vector的大小可以根据需要增加或缩小,以适应在创建Vector之后添加和删除项。
每个向量都试图通过维护一个容量和一个capacityIncrement来优化存储管理。容量总是至少与向量大小一样大;它通常更大,因为随着组件被添加到vector中,vector的存储空间会按capacityIncrement的大小成块增加。应用程序可以在插入大量组件之前增加向量的容量;这减少了增量再分配的数量。
这个类的迭代器和listIterator方法返回的迭代器是快速失败的:如果在迭代器创建后的任何时候,以除了迭代器自己的remove或add方法以外的任何方式对vector进行了结构修改,迭代器将抛出ConcurrentModificationException异常。因此,在面对并发修改时,迭代器会快速而干净地失败,而不是在未来不确定的时间发生任意的、不确定的行为。elements方法返回的Enumerations不会快速失败。
注意,迭代器的快速失败行为不能得到保证,因为一般来说,在存在不同步的并发修改时,不可能做出任何硬保证。快速失败迭代器尽可能地抛出ConcurrentModificationException。因此,编写一个依赖于此异常的程序是错误的:迭代器的快速失败行为应该只用于检测错误。
从Java 2平台v1.2开始,这个类进行了改进,以实现List接口,使其成为Java集合框架的成员。与新的集合实现不同,Vector是同步的。如果不需要线程安全的实现,建议使用ArrayList来代替Vector。

2.vector的底层原理

进入实例找到无参构造器

 初始容量大小是10 我们进入this

 我们再进入this

elementData, 这里就是new一个为10的数组 

3.vector的add方法 

写一个测试方法debug启动

 进入ensureCapacityHelper方法

 如果最小的容量大于数组大大小就扩容,

 把元素放到0

下面我多几个元素,看一下grow方法是如何执行的,我们加几个,再去debug

 11-10肯定大于0,现在他会执行他的扩容方法

老的容量就是等于10,新的容量等于老的容量的2倍就是20

 这个两个判断都是不会执行的 第一个20-11也不小于0,第一个if不执行, 20-数组最大值肯定也是不大于0的,这个判断也是不执行的,下面就直接执行数组复制方法完成扩容。

 4.vector的get方法

debug启动

 下标比数组累计大小大,报数组下标越界

把对应坐标的元素返回

 5.vector的remove方法

编写测试方法debug启动,

 判断数组下标是否越界,获取到元素 ,复制素组

 把最后一位设置为null

6.vector的set方法

书写测试方法 debug启动

这个方法很简单就是把对应坐标的数据修改了

7.vector自定义扩容

这个还是调grow方法进行扩容,这里就不细说了

8.vector总结

1.默认的初始化容量=10,每次扩容时2倍,可以设置每次扩容的容量。

2.基于数组实现

3.List接口下的子类

4.vector是线程安全的(有上同步锁)

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

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

相关文章

C#设计模式详解(2)——Factory Method(工厂方法)

文章目录C#设计模式详解(2)——Factory Method(工厂方法)工厂方法模式1.1 概念1.2 意图1.3 问题1.4 解决方案1.5 工厂方法模式结构1.6 案例代码1.7 游戏开发中的应用C#设计模式详解(2)——Factory Method(工厂方法) 工厂方法模式…

领悟《信号与系统》之 非周期信号的傅里叶变换

非周期信号的傅里叶变换一、非周期信号的傅里叶变换二、 典型信号的傅立叶变换1.单边指数信号2.偶双边指数3. 矩阵脉冲信号4. 奇双边指数5. 符号函数6. 冲激信号7. 阶跃信号三、常用傅里叶变换表这里记录的信号都是非周期信号的傅里叶变化,频谱变换的特点就是&#…

【计算机网络】数据链路层:使用广播信道的数据链路层(1)

局域网的数据链路层 局域网特点:网络为一个单位所拥有,地理范围和站点数目均有限。 地理范围和站点数目均有限。 局域网优点: 具有广播功能,从一个站点可以很方便地访问全网。 便于系统的拓展和演变,各设备的位置…

Discourse 论坛激活邮件问题

根据 Discourse 的官方推荐,我们使用的是 MailGun 的服务。 在大部分情况下都没有问题,但是在一些特定的邮件地址,例如 iCloud,我们在发送激活邮件的时候有提示为: "message": "5.5.1 Error: need MA…

实验:温湿度数据oled显示

OK,本次介绍一个oled实验 本来只想做oled实验的 后面想想这个实验太简单 就加上了温湿度传感器 oled可以打印英文和数字,比如用display.println(“Hello World!”)就可以了 如果打印汉字就比较复杂了 需要相应的软件,生成编码 然后一个字一个字打印 不过只要汉字不…

【数据结构】树——二叉树

1.树的介绍以及树的基本概念和性质 2.二叉树介绍以及二叉树的性质 3.二叉树的构建:穷举创建,递归创建 4.二叉树的基本操作 之前我们介绍了顺序表,链表,以及栈和队列,这几种数据结构都属于线性结构,而我们接…

GreenPlum/PostGreSQL表锁处理

GreenPlum/PostGreSQL表锁处理 数据库中遇到表锁的情况,可以通过select * from pg_stat_activity;查看表锁的进程及进程ID,从而取消进程,解锁。 一、模拟表锁 1.1 模拟表数据 创建lock_test表,并随意插入一条数据,…

Oracle自治事务示例演示

自治事务 自治事务(Pragma autonomous_transaction):是PL/SQL块中的一个单独事务,与调用或触发自己的事务之间互不干扰,自己commit和rollback不会影响其他事务,也不会被其他事务所影响。 通俗的讲&#xff…

【Android App】在线语音识别功能实现(使用云知声平台与WebSocket 超详细 附源码)

需要源码和相关资源请点赞关注收藏后评论区留下QQ~~~ 一、在线语音识别 云知声的语音识别同样采用WebSocket接口,待识别的音频流支持MP3和PCM两种格式,对于在线语音识别来说,云知声使用JSON串封装报文,待识别的音频以二进制形式发…

webpack打包vue文件+gulp打包sass文件

webpack打包vue文件 1,下载依赖 npm i vue-loader npm i webpack-cli2,编写webpack配置文件 /*** 关于webpack的配置文件*/const path require(path)const { VueLoaderPlugin } require(vue-loader)const glob require(glob) // node自带的读取文件的库 /*** …

会多门编程语言的你,最推荐哪3-5门语言?

如果你还想在编程的路上继续提高,那我建议你至少学习4种编程语言。可用的编程语言有很多,所以选择一种感兴趣的学习就可以了。我这么建议的原因是,要掌握编程,建立信心,提高能力,最简单的办法就是学习多种编…

浅析工作流调度器Azkaban

title: Azkaban系列 第一章 概述 1.1 为什么需要工作流调度器 1、一个完整的数据分析系统通常都是由大量任务单元组成: shell 脚本程序,java 程序,mapreduce 程序、hive 脚本等 2、各任务单元之间存在时间先后及前后依赖关系 3、为了很好地…

TIA西门子博途V18安装教程及注意事项

TIA西门子博途V18安装教程及注意事项 前提条件: TIA Portal V18需要.Net Framework 3.5环境,所以在安装TIA V18之前要先安装它。大家可以在控制面板中的程序和功能中检查是否已经安装,如果没有,可以参考以下步骤自行安装: 操作系统&#x

jsp旅行网系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 旅行网系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语…

[附源码]Python计算机毕业设计房屋租赁系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

2022级浙大MEM录取经验过程分享——有需求就要去匹配

我是2022 级 浙大MEM 新录取的考生,去年联考初试取得了213 分的成绩,综合拿到了148分,去年的提面中也拿到了优秀资格,在备考的过程中自己的一些心得体会和经验分享给大家,希望能够有所帮助。我的本科其实比较普通&…

python循环中的continue和break

目录 一.python中的continue 案例1 结果是 注意 案例2 结果是 二.python中的break 案例1 结果是 注意 案例2 结果是 三. python中continue和break的总结 一.python中的continue continue关键字用于:中断本次循环,直接进入下一次循环 continue可以用于:fo…

2.1.2 运算放大器的组成与分类、运算放大器的发展历程

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…

1-10嵌入式Linux系统开发与应用|嵌入式Linux|第三章 Linux编程环境|下篇

目录 1.gcc编译器的使用 1.1gcc软件包 1.2一个基本实例 1.3gcc的主要选项 1.3.1指定函数库和包含文件的查找路径 1.3.2出错检查及警告 1.3.3优化选项 优化带来的问题 1.3.4调试选项 2.GNU C扩展简介 3.GNU make管理项目 3.1make简介 使用make管理项目的原因 4.编…

Nginx那些事儿2

负载均衡 当访问的服务具有多个实例时,需要根据某种“均衡”的策略决定请求发往哪个节点,这就是所谓的负载均衡,目的是为了将数据流量分摊到多个服务器执行,减轻每台服务器的压力,从而提高了数据的吞吐量 负载均衡的种类 常见的硬件有NetScaler、F5、Radware和Array等商用的负…