3-Vector底层结构和源码分析
3-Vector底层结构和源码分析
介绍汇总:
- Vector的基本介绍
- Vector的运行重要步骤
- 底层结构和 ArrayList 的比较
1-Vector的基本介绍
- 定义说明
- Vector 底层也是一个对象数组,protected Object[] elementData ;
- Vector 是线程同步的,即线程安全,Vector 类的操作方法带有 synchronized 。
public synchronized E set(int index, E element) {
if (index >= elementCount)
throw new ArrayIndexOutOfBoundsException(index);
E oldValue = elementData(index);
elementData[index] = element;
return oldValue;
}
- 在开发中,需要线程同步安全是,考虑使用 Vector 。
2-Vector的运行重要步骤
-
Vector 构造器(三种)
无参构造器
public Vector() { this(10); } // 此无参构造器会调用一参构造器,并且初始容量大小为 10 ,容量增量大小为 0
一参构造器
public Vector(int initialCapacity) { this(initialCapacity, 0); } // 此一参构造器会调用两参构造器,并且初始容量为指定大小,容量增量大小为 0
两参构造器
public Vector(int initialCapacity, int capacityIncrement) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); this.elementData = new Object[initialCapacity]; this.capacityIncrement = capacityIncrement; } // 此两参参构造器的初始容量为指定大小,容量增量也为指定大小
总结
从这三个构造器可以发现,核心是两参构造器,也是自由度最高的,可以指定初始容量,以及容量增量,这就代表之后扩容的话,以容量增量 + 原来的容量进行扩容(当然遇到这种方式无法满足扩容要求,就会采用其他方式,看源码);其次自由度最高的是一参构造器,可以指定初始容量,但容量增量为 0 ,这就代表之后扩容的话,以原来的容量的二倍进行扩容(当然遇到这种方式无法满足扩容要求,就会采用其他方式,看源码);然后自由度最低的,无参构造器,初始容量为默认容量 10 ,但容量增量为 0 ,其扩容方式与一餐构造器一致。
-
扩容过程
3- 底层结构和 ArrayList 的比较
集合 | 底层结构 | 版本 | 线程安全(同步)效率 | 扩容倍数 |
---|---|---|---|---|
ArrayList | 可变数组 | jdk1.2 | 不安全,效率高 | 如果有参构造1.5倍如果无参初始化后第一次为10第二次开始按1.5倍 |
Vector | 可变数组Object[] | jdk1.0 | 安全,效率不高 | 若是无参或一参,按原本的容量的2倍扩;若是两参,按原本的容量 + 增加容量扩 |
分类:
Java集合学习笔记
标签:
Java集合
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器