当前位置: 首页 > news >正文

Vector 源码解析:为什么它被 ArrayList 取代了?

1. 什么是Vector1. Vector是早期的动态数组集合(jdk1.0),在单线程下是线程安全的(synchronized2. Vector初始化时源码的变化1. 初始化VectorListString list1 new Vector();ListString list2 new Vector(50,0);2. 对应的源码public Vector() { this(10); }//capacityIncrement是扩容的大小默认是0(意思是按照2倍来扩容),如果传入其他正整数就是在原有的基础上正整数来进行扩容。如传入5那么触发扩容时就是 原有容量 5public Vector(int initialCapacity, int capacityIncrement) { super(); if (initialCapacity 0) throw new IllegalArgumentException(Illegal Capacity: initialCapacity); this.elementData new Object[initialCapacity]; this.capacityIncrement capacityIncrement; }分析如果是无参的构造方法那么初始容器的长度为10如果规定了长度那么就创建对应长度的容器如果来传入了扩容系数那么在扩容时就增加对应系数的容量3. Vector添加元素时源码的变化1. 添加元素list1.add(one);2. 对应源码//1. 获取参数“one”public synchronized boolean add(E e) {//2. 记录修改次数modCount;//3. elementCount:元素数量(默认是0)ensureCapacityHelper(elementCount 1);//6. 在位置0写入元素“one”并且元素数量elementData[elementCount] e; return true; }//4.拿到minCapacity(最小容量):1private void ensureCapacityHelper(int minCapacity) { // overflow-conscious code//5. 1-10(Vecotor默认数组长度),所以暂时不执行grow()if (minCapacity - elementData.length 0)//7. 当元素数量达到扩容时执行minCapacity10grow(minCapacity); }//8. 传入最小容量 10private void grow(int minCapacity) { // overflow-conscious code//9. 记录老的容量 10int oldCapacity elementData.length;//10. 新的容量 1010(在capacityIncrement 0时也即按照默认的扩容;如果是capacityIncrement 0,说明传入了扩容数量那么 新的容量 10 capacityIncrementint newCapacity oldCapacity ((capacityIncrement 0) ? capacityIncrement : oldCapacity);//11. 20-1010 不成立不执行如果capacityIncrement是负数会触发if (newCapacity - minCapacity 0) newCapacity minCapacity;//12. 一般不会添加21亿个数据当然如果真的发生了那我也不知道该怎么办if (newCapacity - MAX_ARRAY_SIZE 0) newCapacity hugeCapacity(minCapacity);//13. 按照新的容量来创建新的数组并把内容写入把引用指向新的对象elementData Arrays.copyOf(elementData, newCapacity); }4.总结1. Vector是线程安全的容器(单线程环境下性能不如araayLsit(因为Vector加锁2.Vector的默认扩容是2倍也可以自定义扩容而ArrayList是1.5倍
http://www.gsyq.cn/news/1351827.html

相关文章:

  • SAR遥感技术:全天候农业监测的实践指南与数据融合
  • 别再手动删了!用Notepad++正则表达式5分钟批量清理课程目录(附实战案例)
  • Ascend C 算子开发:10 分钟写一个高性能 MatMul
  • TPS5430玩点不一样的:15V转-12V负压生成电路,给你的运放供电,PCB布局这些坑千万别踩
  • 2026年5月云南基建选材指南:聚焦耐用钢筋混凝土排水管实力品牌 - 2026年企业推荐榜
  • 激光相干反馈冷却:从光压原理到量子基态制备的微观操控技术
  • 从“能读文档”到“能开会吵架”,技术人英语进阶路线图
  • NotebookLM支持实时字幕吗?不,它真正强悍的是这4种高阶语音语义重构能力
  • 【信息系统项目管理师论文押题】论信息系统项目的度量绩效域
  • 别再手动折腾了!用Docker Compose一键部署Rocket.Chat(附完整.env配置详解)
  • 520遇见AI:猛犸AI智能体训练增长营第15期深圳圆满落幕
  • 深入nRF5340双核通信:拆解LE Audio同步背后的IPC与DPPI机制
  • MPI_Win_allocate_shared介绍和使用
  • ops-softmax:Transformer 推理中的概率归一化引擎
  • OpenClaw:高效管理分布式Agent开发团队
  • C# 基于OpenCv的视觉工作流-章76-轮廓-段距
  • 从手机到机器人:拆解RGB-D摄像头(如Kinect、RealSense)如何‘看见’三维世界
  • TIPTOP ERP开发环境搭建保姆级教程:从零配置Genero Studio 2.40.11到汉化
  • 手机屏幕越来越高清,MIPI接口扛不住了?聊聊DSC压缩技术如何帮你省下硬件成本
  • Newman安装之nodejs下载安装
  • 从ENVI到MATLAB:高光谱图像处理工作流迁移指南(以真假彩色显示为例)
  • 避开EI投稿的‘乱码坑’与‘格式雷’:从作者信息填写到PDF Express通关指南
  • 从SolidWorks到ROS:如何用DH参数为遨博E5机械臂生成URDF模型?
  • pto-isa:昇腾 Graph Compiler 的虚拟指令集
  • Triton + CANN GE Backend:大模型推理服务部署
  • cann-learning-hub:从零开始学昇腾的最短路径
  • 核聚变ECEi数据压缩与GPU加速优化实践
  • Keil MDK中第三方软件包兼容性问题解析与解决
  • 为什么你的 AI 应用做不成 Agent
  • FPGA开发避坑实录:我在Quartus II里用LPM_ROM做信号发生器时踩过的那些‘雷’