赞
踩
ArrayList 是 java 集合框架中常用的数据结构。继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化。允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。
//创建ArrayList变量。
ArrayList<Integer> listInt = new ArrayList<>();
//这行代码表示创建一个ArrayList变量,里面存放的值是Integer类型的。
//如果想存放其它类型的值,如字符串类型,则创建ArrayList变量的代码为
ArrayList<String> listStr = new ArrayList<>();
//如果没有声明ArrayList的大小,那么它的默认大小就是10
ArrayList<String> listStr10 = new ArrayList<>(10);
ArrayList在内部使用了数组来存储所有元素。例如,一个ArrayList拥有5个元素,实际数组大小为6(即有一个空位):
- size=5
- ┌───┬───┬───┬───┬───┬───┐
- │ 1 │ 2 │ 3 │ 4 │ 5 │ │
- └───┴───┴───┴───┴───┴───┘
当添加一个元素并指定索引到ArrayList时,ArrayList自动移动需要移动的元素:
- size=5
- ┌───┬───┬───┬───┬───┬───┐
- │ 1 │ 2 │ │ 3 │ 4 │ 5 │
- └───┴───┴───┴───┴───┴───┘
然后,往内部指定索引的数组位置添加一个元素,然后把size加1:
- size=6
- ┌───┬───┬───┬───┬───┬───┐
- │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │
- └───┴───┴───┴───┴───┴───┘
继续添加元素,但是数组已满,没有空闲位置的时候,ArrayList先创建一个更大的新数组,然后把旧数组的所有元素复制到新数组,紧接着用新数组取代旧数组:
- size=6
- ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
- │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ │ │ │ │ │ │
- └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
新数组就有了空位,可以继续添加一个元素到数组末尾,同时size加1:
- size=7
- ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
- │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ │ │ │ │ │
- └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
ArrayList把添加和删除的操作封装起来,让我们操作`List`类似于操作数组,却不用关心内部元素如何移动。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。