[2025.1.9 JavaSE学习]集合-2(List接口 && ArrayList)
List接口基本介绍
List接口是Collection接口的子接口
- List集合类中元素有序(即添加顺序和取出顺序一致),且可重复
- List集合每个元素都有其对应索引
- List容器中的元素都对应一个整数型的序号记载其在容器中的位置
List三种便利方式
- iterator
- 增强for循环
- 普通for循环
ArrayList注意事项
- list.get()得到的是Object类型,如果需要调用子类的方法,需要向下转型
- ArrayList可以加入null,并多个
- ArrayList是由数组来实现数据存储的
- ArrayList基本等同于Vector,除了ArrayList线程不安全(没有synchronized的修饰),但是执行效率高,多线程情况下,不推荐使用ArrayList
ArrayList底层结构和源码分析(重点)
- ArrayList中维护了一个Object类型的数组elementData,transient:表示该属性不会被序列化
transient Object[ ] elementData;
-
当创建ArrayList对象时,如果使用的是无参构造器,则初始化elementData容量为0,第1次添加,则扩容为10;如需要再次扩容,则扩容为1.5倍
-
如果使用指定大小构造器,则初始化为指定大小;如果需要再次扩容,则直接扩容为1.5倍
-
例子:无参构造器源码如下:

- list.add方法如下:

ensureCapacityInternal方法如下,此处DEFAULT_CAPACITY = 10:

如果需要的容量大于实际需要的容量,则扩容(modCount:记录集合被修改的次数,多线程操作):

利用位移进行扩容,第1次newCapacity赋值为10,后面才真正开始1.5倍扩容:


浙公网安备 33010602011771号