Vector底层结构和源码分析

1. Vector 的基本介绍

1) Vector类的定义说明

2) Vector底层也是一个对象数组, protected Object[] elementData;

3) Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized

public synchronized E get(int index) {
	if (index > = elementCount)
	throw new ArrayIndexOutOfBoundsException(index);
	return elementData(index);
}	
  • 在开发中,需要线程同步安全时,考虑使用Vector
  • 案例:

2. 源码分析

  1. new Vector() 底层public Vector() { this(10); }补充:如果是 Vector vector = new Vector(8); 走的方法:
public Vector(int initialCapacity) {
this(initialCapacity, 0);
}
  1. vector.add(i)

2.1 下面这个方法就添加数据到 vector 集合

public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}

2.2 确定是否需要扩容 条件 : minCapacity - elementData.length>0

private void ensureCapacityHelper(int minCapacity) {
// overflow-conscious code
if (minCapacity - elementData.length > 0
	grow(minCapacity);
}

2.3 如果 需要的数组大小 不够用,就扩容 , 扩容的算法

//newCapacity = oldCapacity + ((capacityIncrement > 0) ?
//capacityIncrement : oldCapacity); 就是扩容两倍. 
private void grow(int minCapacity) {
	// overflow-conscious code
	int oldCapacity = elementData.length;
	int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
	capacityIncrement : oldCapacity);
	if (newCapacity - minCapacity < 0)
	newCapacity = minCapacity;
	if (newCapacity - MAX_ARRAY_SIZE > 0)
	newCapacity = hugeCapacity(minCapacity);
	elementData = Arrays.copyOf(elementData, newCapacity);
}

3. Vector 和 ArrayList 的比较

本文转载于网络 如有侵权请联系删除

相关文章

  • 锘崴科技王爽:提升效能与安全平衡点,让隐私计算发挥更大潜力价值 | 数据猿专访

    近日,德勤发布的《未来医院报告》指出:未来的医疗机构长期发展需要建立数字化转型的文化内核;具备信息分享及便捷沟通的科技技术;注重医疗数据收集及分析;引入更适应医疗数字化的人才及更重视信息安全等。数据、安全、科技都是报告中反复提及的关键词。2016年6月,国务院办公厅发布的《关于促进和规范健康医疗大数据应用发展的指导意见》明确指出:“到2020年,健康医疗大数据相关政策法规、安全防护、应用标准体系不断完善,适应国情的健康医疗大数据应用发展模式基本建立。”而后,我国又陆续出台了《数据安全法》、《个人信息保护法》等数据保护相关法律法规。2021年7月1日,我国正式实施《信息安全技术健康医疗数据安全指南》,详细规定了医疗数据分类、使用披露原则、安全措施、安全管理指南、安全技术指南等,并对八个代表性医疗数据应用场景的数据安全进行了分析,罗列了数据应用中最常出现问题的临床研究数据、健康数据、移动应用数据及医疗器械数据等,解决了健康医疗数据的融合共享和开放应用,让数据在为个人及国家利益服务的同时,也保证了个人信息的安全和国家公共利益的需要。多份相关文件反复强调医疗大数据的重要性和使用价值,可见我国对

  • 5年没发paper,读博想放弃?科大博导万字自述:曾连收13封拒稿信

    【新智元导读】五年没发论文也别放弃!科大博导在知乎上发表万字自述,曾连收13封拒稿信,最后半年才把文章发出去,最重要的是:相信自己,厚积薄发!最近知乎上一个问题又掀起热浪,「六年没发文章是什么体验」?我猜,除了「焦虑」以外可能只剩「绝望」了吧,面临生活、学业的双重压力,而自己也不再年轻,像发起了一场冲锋,却没找到敌人,但已没有力气发起二次冲锋。在问题下,威斯康星大学麦迪逊分校博士生邵帅曾写了一篇万字长文,讲述了自己读博期间的经历,五年时间一篇文章未发,连收13封拒稿信。这篇回答发出后的半年,作者厚积薄发,五篇文章全中,其中包括顶会FOCS/SODA,最后博士顺利毕业,还找到了牛津大学的博士后工作。而作者目前也已经回到母校中国科大计算机学院任特任教授、博士生导师。当时这篇回答也是引起了广泛的共鸣,读博的个中心酸,只有自己能体会。「如果有一天,我连心气也丢了,甘于现状,可能就真的泯然众人矣了。」祝愿每位博士生都能厚积薄发,尽管过程曲折,最终都能收获happyending!作者信息 邵帅,中国科大计算机学院特任教授、博士生导师。2014年本科毕业于中国科大少年班学院华罗庚班,2020年博

  • 【未完成】记一次简单的漏洞挖掘

    信息收集:拿到网址第一步肯定是先信息收集啦~信息收集就不多说了简单看一下这个网站是nodejs写的然后是Nginx服务器,猜测是Mysql数据库然后学校首页这边有个报名功能,本想尝试盲打XSS..最后与失败告终...然后这里有个查询幸福来的太突然了这里没有任何过滤,找到一个反射型XSS,没啥用,继续走这个网站都是一些静态页面,然后我打算对它的OA后台下手....OA后台:oa.xxx.cn开始爆破管理员的密码没爆破出来,最后我想,居然爆破不出来,那我爆破其他账户不行?于是我便整理了一份字典,开始对它爆破,把字典全部导入账号,密码统一123456272都是账号或密码不正确的,其他的都是正确了而已还是大部分弱口令...拿到了账号密码,登录OA后台然后我看到有个搜索的功能输入单引号查询,这边弹窗好像是说出错,直觉告诉我,这里绝对有问题!开启BURP抓包,把抓到的数据包保存下来放到sqlmap目录下果然没错,存在一个POST注入,因为时间问题就不再继续挖下去了,也挖不动了!!!

  • NLP算法专家:全面解读文本情感分析任务

    机器之心专栏 作者:李明磊 作为NLP领域重要的研究方向之一,情感分析在实际业务场景中存在巨大的应用价值。在此文中,华为云NLP算法专家李明磊为我们介绍了情感分析的概念以及华为云在情感分析方面的实践和进展。 基本概念 为什么:随着移动互联网的普及,网民已经习惯于在网络上表达意见和建议,比如电商网站上对商品的评价、社交媒体中对品牌、产品、政策的评价等等。这些评价中都蕴含着巨大的商业价值。比如某品牌公司可以分析社交媒体上广大民众对该品牌的评价,如果负面评价忽然增多,就可以快速采取相应的行动。而这种正负面评价的分析就是情感分析的主要应用场景。 是什么:文本情感分析旨在分析出文本中针对某个对象的评价的正负面,比如「华为手机非常好」就是一个正面评价。情感分析主要有五个要素,(entity/实体,aspect/属性,opinion/观点,holder/观点持有者,time/时间),其中实体和属性合并称为评价对象(target)。情感分析的目标就是从非结构化的文本评论中抽取出这五个要素。 图1情感分析五要素 举例如下图: 图2情感分析五要素例子 上例中左侧为非结构化的评论文本,右侧为情感分析模型分析

  • frp 供内网穿透服务的工具

    frp供内网穿透服务的工具项目地址:https://github.com/fatedier/frp修改配置文件:1[common] 2server_addr=frp.yo1c.cc 3server_port=7000 4#log_file=./frpc.log 5log_level=info 6log_max_days=3 7privilege_token=30064E394C1C63766DA345EEFDA490EF 8 9[pay] 10type=http 11local_ip=127.0.0.1 12local_port=80 13subdomain=tinywan 14#custom_domains=www.yourdomain.com 15pool_count=10复制使用gitshell启动服务1//进入到当前frp文件目录 2$./frpc.exe-c./frpc.ini 32018/07/0918:05:44[I][control.go:276][61198354d3f13b48]logintoserversuccess,getrunid[61198354d3f13b

  • 资源 | 中文NLP资源库

    乾明编辑整理 量子位出品|公众号QbitAI最近,在GitHub上,有人收罗了一份资源,汇集了40个关于中文NLP词库,涵盖了各个方面。中英文敏感词、语言检测、中外手机/电话归属地/运营商查询、名字推断性别、手机号抽取、身份证抽取、邮箱抽取、中日文人名库、中文缩写库、拆字词典。词汇情感值、停用词、反动词表、暴恐词表、繁简体转换、英文模拟中文发音、汪峰歌词生成器、职业名称词库、同义词库、反义词库。否定词库、汽车品牌词库、汽车零件词库、连续英文切割、各种中文词向量、公司名字大全、古诗词库、IT词库、财经词库、成语词库。地名词库、历史名人词库、诗词词库、医学词库、饮食词库、法律词库、汽车词库、动物词库、中文聊天语料、中文谣言数据。目前,这份资源在GitHub上已经超过了700星。 收罗这份资源的人,在GitHub上昵称为“Yang”,备注信息中显示,他是北航的博士。在知乎上也开设了一个专栏,专门介绍关于机器学习的小知识。在Yang给出的这份资源中,他并不只是简简单单地提供一些词库了事,还给出了32个词库的用法。 比如,中英文敏感词过滤:>>>f=DFAFilter() &g

  • 运维工程师---互联网的幕后英雄

    来源:马哥教育链接:https://mp.weixin.qq.com/s/q5wzRrXzJn42SQqveiJ8mA作为互联网的幕后英雄,运维工程师长期隐匿在大众认知范围之外,关于运维的讨论仍旧是一片无人涉足的荒漠。在某知名行业研究调查结果中,非互联网从业者对于运维相关问题的回复有三个高频词汇是:不知道、没听过、网管。当调查人员告诉他们科幻电影中展示黑客高超技巧时的命令行界面正是大多数运维工程师每日工作环境时,他们发出极其一致的惊叹。相对于普罗大众的一无所知,技术圈对运维的态度则更偏向于黑色幽默。相较于开发等工作岗位,7*24小时待命的运维工程师往往到手薪水比前者低上一两成,同时还要接受“背锅侠”这一艰巨使命。作为运维职业的分支,桌面运维、机房运维等基础运维工作从业者还必须额外承受无法升职的压力和低于开发一半以上的薪水。所幸,精于Linux的运维工程师还能为运维行业争一口气。Linux占领了90%以上的企业市场,也为善于维护Linux环境的运维工程师提供了职业道路的转机。借Linux市占率之威,Linux运维工程师的收入水平在从业经验达到两年后即与开发相差无几,同时无需承受开发的“3

  • 三年后我们就可以坐无人车了?看完这些事实你应该会信

    说到机器人,我们首先会联想到类似于Boston、Pepper这样的黑科技机器人。不过,从CCF-GAIR(人工智能与机器人峰会)大会上看到的趋势是,先行普及的机器人将会是“不那么像机器人的机器人,比如被称为空中机器人的无人机已走向普及,结合了大量黑科技的道路机器人无人车,正在各大巨头推动之下准备上路,百度给出的目标最为激进,百度高级副总裁、百度自动驾驶事业部总经理王劲在GAIR大会上再次明确,无人车要在三年后小规模商用,五年后大规模量产,这个时间表比最先探索无人车的互联网巨头更为激进,能行吗?看完这些事实有助于我们的判断。 1、群雄逐鹿无人车市场无人车历史悠久,最早可追溯到1939年。2012年Google进入市场将其带入大众视野。最近一年,越来越多巨头加入到无人车商业化进程之中。最激进的是百度和特斯拉,百度提出三年商用五年量产的目标,正在中美开展大量路测;特斯拉大力推广备受争议的自动驾驶系统Autopilot。不过,这个市场真正能够快速崛起,是不同玩家不约而同地加入进来,大家一起推进自然更快:•互联网巨头。谷歌、百度为代表的互联网巨头借助于人工智能和高精地图等优势,成为无人车最积极的

  • 智能体结构

    智能体的结构 迄今为止我们通过描述行为—在任何给定的感知序列下采取的行动—讨论了智能体,现在我们不得不将知难而进,去讨论智能体内部是如何工作的,AI的任务是设计智能体程序,通过它来把感知信息映射到行动的智能体函数,我们假设改程序在某种具备实际传感器和执行器计算装置上运行-我们称之为体系结构。智能体=体系结构+程序显而易见,我们选择的程序必须适合体系结构。如果程序要能够进行诸如行走这样的行动。那么体系结构最好有腿。体系结构也许只是一台普通的个人计算机,或者一辆自动驾驶汽车,车上载有一些计算机,摄像头和其他传感器。总而言之,体系结构为程序提供来自传感器的感知信息,运行程序,并且把程序产生的行动选择传送给执行器。在我写的文章中绝对多数的章节都是关于智能体的程序的,其实和机器学习程序大同小异。1:智能体程序其实我们设计的智能体程序都具有相同的骨架,他们从传感器得到感知信息作为输入,返回一个行动交给执行器。注意智能体程序和智能体函数之间的差别。智能体程序在于当前感知为输入,而智能体函数是以整个历史为输入的。智能体程序只把当前感知作为输入是因为环境无法得到更多的东西。如果智能体的行动依赖于整个感知

  • 技术分享 | my2sql 与 binlog2sql 解析效率 battle

    作者:杨彩琳 爱可生华东交付部DBA,主要负责MySQL日常问题处理及DMP产品支持。爱好跳舞,追剧。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。前言大家在平时运维过程中应该都了解过或者使用过一些binlog解析工具,比如今天要介绍的my2sql和binlog2sql。my2sql是基于my2fback、binlog_rollback工具二次开发而来的(go语言),binlog2sql是python语言开发的mysqlbinlog解析工具,两者都可以通过解析binlog文件,生成原始SQL,回滚SQL,去除主键的insertsql等,然后实现数据快速闪回,主从切换后的数据补偿等功能。既然两个工具都可以实现解析binlog的功能,那么它们两个之间我们该如何来抉择呢?请跟随小编往下看“my2sql与binlog2sql之间的battle”吧。主要参数简介【这里只罗列了几个常用的参数,有其他需求的参数可进入链接中查看】my2sql参数参数解释-moderepl:伪装成从库从主库获取binlog文件;file:从本地文件系统获取binlog文

  • 《软件性能测试与LoadRunner实战教程》新书上市

      作者前三本书《软件性能测试与LoadRunner实战》、《精通软件性能测试与LoadRunner实战》和《精通软件性能测试与LoadRunner最佳实战》面市后,受到广大软件测试和开发人员的关注与好评。鉴于很多功能测试人员、在校大学生以及众多零基础性能测试人员,对性能测试及LoadRunner工具的极大求知、学习欲望,结合零性能测试基础特点,《软件性能测试与LoadRunner实战教程》在前几本书的基础上,取其之精华部分内容,同时对书的内容进行了丰富,从零基础人员的角度对书的内容进行了系统性梳理,从性能测试理论、LoadRunner工具应用和项目完整案例(包括:性能测试完整执行过程及其各阶段文档写作)多管齐下,使读者朋友们可以系统、快速掌握性能测试知识并实际应用到工作当中,相信这些特点您会从下方的图书目录中清晰看出。   为了方便大家对性能测试相关内容的学习,本书附有1张光盘,光盘包含几十个协议脚本示例、300余分钟视频、同时为方便广大高校老师和测试培训机构教学附上各章节教学幻灯片,结合大家对性能测试脚本开发这部分重点内容的强烈要求,作者录制了近500分钟的视频进行关键内容的讲解

  • [洛谷友链] 各位巨佬的洛谷主页分享至此

    QWQ怎么这篇扯谈的文章阅读量最高?!! 很抱歉,由于洛谷更新后,洛谷友链就崩掉了,暂时看不了 友情链接:机房里的神犇: 神犇M_sea 神犇xgzc 神犇hyj 神犇cjrzn 神犇wyl 神犇MLEAutoMaton(fexuile) 神犇_zzy 神犇撤云 神犇cjlzf 友情链接: 机房里可爱的Karry小姐姐 友情链接:机房里的带师: 计算几何带师MLEAutoMaton(fexuile) 数论带师xgzc 网络流带师撤云 和我一起学OI的老同志们: 友情链接机房的几位大佬: 1.人气讲师Objective-Cblog 2.全机房最强的大佬LaTeX 3.机房摆王Pascal 4.某位AK模拟赛的日月大佬C# 5.(bby大佬实在是太强了%%%)10天做题量200的大佬(真正的摆王,从未被抓摆)PHP 友情链接同一机房的其他同志: 1.真香王Java 2.小可爱(_修电脑(蓝屏)小王子)Pythonblog 3.自称chai的dalaoC++ 新一波友链有待更新...... 转载请注明出处--Xx_queue

  • Nginx负载均衡配置

    原文地址 场景描述 单机缺点 当量上来后由于单机请求压力大,存在单点故障等问题 负载优点 降低单点故障 提高服务器处理能力 灵活控制请求流量 隐藏真实服务器地址 负载均衡 如下图 Nginx配置 配置如下 #usernobody; worker_processes8; worker_rlimit_nofile65535; events{ useepoll; worker_connections8192; } #http核心 http{ includemime.types; default_typeapplication/octet-stream; client_max_body_size10M; client_body_buffer_size256k; #日志格式 log_formatmain'$remote_addr-$remote_user[$time_local]"$request"' '"$status"$body_bytes_sent"$http_referer"' '"$http_user_agent""$http_x_forwarded_f

  • 量子优势

    2017年1 月,微软全球执行副总裁、人工智能科研项目的总负责人沈向洋透露,他们正在着手研发量子计算机,已经拿下了世界级顶尖量子计算专家 MichaelFreedman以及诸多专家。“很快会有进展分享给你,”他说。 时隔一年后,微软的量子计算开发工具包和开发语言 Q,已经适配了Windows10、macOS和Linux。 2018年1月,拉斯维加斯CES,英特尔 CEO急于证明不管摩尔定律是否失效,我们还有新招,带来了一枚高达49-qubit 的超导量子计算机。这家老字号已经给最时髦的新架构起好了芯片界熟悉的名字:TangleLake。 2018年2月,IBM宣布成功测试了一台 16-qubit(量子比特)和一台17-qubit的量子计算机,并透露还将提供30至50量子比特不等的设计。IBM 是量子计算机在量子比特这一指标上狂飙式增长的拥趸,告诉媒体100-qubit量子计算机在几年内便可制成。 科技公司大多公开表达或半公开支持一种说法:量子优势——Quantum Supremacy,也译作量子霸权,即量子计算机性能超越史上最强的经典计算机,将在2017年底到来。 量子计算在最近一两年

  • 乘风破浪:LeetCode真题_005_Longest Palindromic Substring

    乘风破浪:LeetCode真题_005_LongestPalindromicSubstring 一、前言    前面我们已经提到过了一些解题方法,比如递推,逻辑推理,递归等等,其实这些都可以用到动态规划上来。动态规划可以说是比较容易理解但是难以写出代码的。究其原因还是我们的分析没有达到细致入微的程度,下面我们看一个可以使用动态规划解决的问题。 二、LongestPalindromicSubstring 2.1问题理解 2.2问题分析与解答    通过题目,我们可以发现在一个大的字符串中寻找一个回文子序列,还要保证序列的长度最大,我们可以想象如果一个序列A[1...n]是回文序列,那么定义一个数据结构来标记所有的回文序列,dp[i][j]==true,代表字符串从下标i到下标j是一个回文序列,且是最长的,那么dp[i+1][j-1]也必定为一个回文序列,并且A[i]==A[j]以此类推直至我们最开始知道的一个字符是一个回文序列,也就是dp[i][i]==true。这样如果我们能找到一个子串使得这样一路下来一直满足,那么我们就找

  • 自定义程序启动脚本加入到supervisord下管理

    ubuntu14.04系统,直接通过apt-get安装即可 apt-getinstallsupervisord 复制 官网:http://www.supervisord.org/ 主配置文件 这个配置在/etc/supervisor/supervisord.conf 配置内容如下: root@xxx:/etc/supervisor/conf.d#grep-vE"(^;|^$)"/etc/supervisor/supervisord.conf [unix_http_server] file=/var/log/supervisord/supervisor.sock;(thepathtothesocketfile) [supervisord] logfile=/var/log/supervisord/supervisord.log;(mainlogfile;default$CWD/supervisord.log) logfile_maxbytes=50MB;(maxmainlogfilebytesb4rotation;default50MB) logfile_backups=10;(numo

  • Java学习——Spring初学

    最近几天有在开始学习Spring框架开发,虽说学的比较晚,但是自我感觉学习的很快   笔记:   1.Spring的出现,是为了高效的完成软件开发,依照软件设计模式的“高内聚低耦合”原则,实现前后端分离,达到不改变原有代码的前提下,对程序增添新的功能。   2.Spring的核心原理是在内存中开出一篇区域用于存储程序中的类,当程序需要时将其拿出(当一个工具类不需要构造太多次,就可以只构建一次并放在spring容器中)。   3.Spring的实现是需要在配置文件或是配置类中,对需要赋值或复用的类进行声明,并分配到需要的类中

  • 序列化与反序列化

    1packagemyDemo; 2importjava.io.BufferedWriter; 3importjava.io.File; 4importjava.io.FileInputStream; 5importjava.io.FileOutputStream; 6importjava.io.FileReader; 7importjava.io.FileWriter; 8importjava.io.IOException; 9importjava.io.ObjectInputStream; 10importjava.io.ObjectOutputStream; 11importjava.io.Serializable; 12importjava.util.ArrayList; 13importjava.util.HashMap; 14importjava.util.Iterator; 15importjava.util.List; 16importjava.util.Map; 17importjava.util.Scanner; 18importjava.util.Stack;

  • 存档 之前关于路径设置遇到的问题

    pack://application:,,,/报错..\Resources\images\加载.png   ..\   回到上一级目录

  • 一、Spring Cloud Alibaba项目,父工程搭建

    1、版本选择 SpringCloudAlibaba官方整理的版本说明: https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 适配SpringBoot为2.4,SpringCloudHoxton版本及以下的SpringCloudAlibaba版本如下表(最新版本用*标记):  SpringCloudAlibabaVersionSpringCloudVersionSpringBootVersion 2.2.8.RELEASE* SpringCloudHoxton.SR12 2.3.12.RELEASE 2.2.7.RELEASE SpringCloudHoxton.SR12 2.3.12.RELEASE 2.2.6.RELEASE SpringCloudHoxton.SR9 2.3.2.RELEASE 2.1.4.RELEASE SpringCloudGreenwich.SR6 2.1

  • 案例四:Shell脚本生成随机密码

    生成随机密码(urandom版本)   #!/bin/bash   #Author:丁丁历险(Jacob)   #/dev/urandom文件是Linux内置的随机设备文件   #cat/dev/urandom可以看看里面的内容,ctrl+c退出查看   #查看该文件内容后,发现内容有些太随机,包括很多特殊符号,我们需要的密码不希望使用这些符号   #tr-dc'_A-Za-z0-9'   #该命令可以将随机文件中其他的字符删除,仅保留大小写字母,数字,下划线,但是内容还是太多   #我们可以继续将优化好的内容通过管道传递给head命令,在大量数据中仅显示头10个字节   #注意A前面有个下划线   tr-dc'_A-Za-z0-9' 复制 生成随机密码(字串截取版本)   #!/bin/bash   #Author:丁丁历险(Jacob)   #设置变量key,存储密码的所有可能性(密码库),如果还需要其他字符请自行添加其他密码字符   #使用$#统计密码库的长度   key="0123456789abcdefghijklmnopqrstuvwxyzABCD

相关推荐

推荐阅读