一、说明
Java 提供一个类可以解决数组的动态长度的问题,它就是 ArrayList 类,即泛型数组列表,也就是所谓的动态数组。使用 ArrayList 可以实时地添加元素而不用去管长度的问题。
ArrayList 属于集合类库,实现了 List 接口。
二、基本使用
1.声明
ArrayList 是一个采用 类型参数 的 泛型类。需要用尖括号将类名括起来加在后面,以指定数组列表保存的元素对象类型。注意尖括号内只能是类,不能是基本数据类型,如要存储基本数据类型,可使用对象包装器(Integer 等)
ArrayList<String> arrList = new ArrayList<String>(); //声明和构造一个用来保存 String 类型的动态数组
2.元素的添加与移除
使用 add 方法将元素添加到数组列表中,分为默认的末尾添加和指定顺序添加。使用索引添加时,索引后面的元素都会往后移一位。
arrList.add("first");//添加到末尾
arrList.add(3,"third");// 通过索引添加到第三位,原本在第三位及后面的元素顺次后移
使用 remove 方法删除指定位置元素,其后的元素将顺次前移,删除的元素将通过返回值返回。
String s = arrList.remove (3);//删除第三个元素,s = third
对数组实施插入和删除操作的效率很低。
3.获取数组长度
使用 size 方法获取数组列表的实际元素长度 ,相当于数组的 length 方法。
4.访问数组列表元素
ArrayList 的元素只能通过 set(替换元素) 和 get(获取元素) 方法访问。注意,使用 set 方法设置元素时,只能替换已经存在的元素。
5.将 ArrayList 转换为数组
使用 toArray 方法将 ArrayList 转换为数组。
String [] arr = new String[arrList.size()];
arrList.toArray(arr);
三、扩展使用
1.长度问题
如果能够预估数组的元素数量,可以预先设置数组大小,先分配固定空间。有两种方法预设,分别是构造时传入参数和 ensureCapacity 方法。
ArrayList<String> aList = new ArrayList<>(100);
ArrayList<String> bList = new ArrayList<>();
bList.ensureCapacity(100);//要在数组使用前调用
两种方法均为数组分配100个对象的空间。
ArrayList 的初始分配空间和数组不同,ArrayList只是预留空间,其内没有元素。
如果添加时元素超过100个,会再次分配100个空间。这意味着如果有102个数,ArrayList的实际占用空间是200个对象的空间。
在长度确定之后,可以使用 trimToSize 方法将容量削减到当前尺寸。但再次添加时又会增加100个空间。
2.ArrayList 还有一些不常用的方法,如 isEmpty 判断是否为空、addAll 添加集合等,使用时参考官方文档。