ArrayList和Vector
ArrayList注意事项
- 可以加入多个null
- 由数组来实现数据存储
- 基本等同于Vector,ArrayList是线程不安全,但是执行效率高
并没有使用 synchronized()
ArrayList底层操作机制源码
- ArrayList中维护了一个Object类型的数组elementData,
transient Object[] elementData
transient 表示不会被序列号 - 当创建ArrayList对象时,如果使用的无参构造器,则初始elementData的容量为0,第一次添加,则扩容elementData为10,如需要再次扩容,则扩容element为1,5倍
- 如果使用的是指定大小的容器,则初始elementData容量为指定大小,如需要再次扩容,则直接扩容elementData为1.5倍
源码分析
无参构造
创建一个空的elementData数组
ensureCapacityInternal()
是否要扩容
第一次扩容为10
modcount
记录修改次数,避免多线程,minCapacity-elementData.length
如果elementData
的长度不够了,就grow
进行底层扩容
有参构造
如果有数值>0就直接new,否则就按照无参构造的扩容方法
Vector特点
- 底层也是一个对象数字
- 线程安全,vector类的操作方法带有
synchronized
- 安全,效率不高
- 扩容倍数:如果是无参,默认10,则后面2倍扩容,如果指定大小,则后面按2倍扩容
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器