ArrayList底层原理

📅 2026/7/30 17:23:53
ArrayList底层原理
一、ArrayList的底层数据结构是什么ArrayList的底层是一个Object数组。源码如下://默认初始容量,ArrayList无参构造时首次 add会扩到这里 private static final int DEFAULT_CAPACITY = 10; //空数组实例,new ArrayList(0)或传入空集合时使用,避免重复创建 private static final Object[] EMPTY_ELEMENTDATA = {}; //无参构造使用的空数组,标记"默认容量模式",区别于显式传0的空数组 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; //真正存储元素的数组,用transient修饰——序列化时会走自定义逻辑,不直接序列化整个数组 transient Object[] elementData; //当前元素个数,不是数组长度,数组长度永远是elementData.length private int size;elementData就是存数据的数组。当new ArrayList()时,它初始化为一个空数组,第一次add时才扩容到10。这叫懒加载——不浪费那10个对象引用的空间。三个空数组常量的区别:- EMPTY_ELEMENTDATA:new ArrayList(0) 或者传了空集合时用- DEFAULTCAPACITY_EMPTY_ELEMENTDATA:无参构造时用,用来标记「我是默认容量,首次add要扩到10」- 区别在于add时的扩容逻辑不同——默认空数组走DEFAULT_CAPACITY逻辑,显式