前言:许多程序设计语言规定在编译时就需确定数组的大小,这是一个容易令人感觉不适的问题。许多时候,这样的设计会迫使程序员不得不做出一些不情愿的折中。Java中的ArrayList类(当然不止ArrayList,本文先认识一下ArrayList。)是一个解决这个问题的不错的选择。
1、概念:ArrayList是一个采用类型参数(type parameter)的泛型类(generic class)。ArrayList并不是Java程序设计语言的一部分,它只是一个由某些人编写且被放在标准库中的一个实用类。
2、使用:使用ArrayList需要指定列表保存的元素对象类型,指定的方式是用一对尖括号将对象类型的所属类名括起来,加在ArrayList后面,这种被称为“菱形”语法,格式如下:
ArrayList<String> list = new ArrayList<>();
3、添加元素:add()方法
可以使用add方法向ArrayList中添加元素,如:
list.add("test");
3.1、ArrayList管理着对象引用的一个内部数组,随着元素的添加,内部数组的空间有可能被用尽。此时继续添加元素,ArrayList将自动创建一个更大的数组,并将所有对象从较小的数组中拷贝到较大的数组中。 如果可以预先确定需要存储的元素的数量,则可以在填充元素之前调用ensureCapacity方法,此方法将分配一个包含确定数量的内部数组,而不用重新分配空间。
list.ensureCapacity(100);
也可以在初始化ArrayList时,将初始容量传递给构造器:
ArrayList<String> list = new ArrayList<>(100);
3.2、size()方法获取ArrayList包含的实际元素数目:
list.size();
注意:ArrayList的容量与数组的大小有着非常重要的区别:如果为数组分配了确定数量的存储空间,数组就有所分配数量的空位置可用,如下面代码输出100:
String[] strings = new String[100];
System.out.println(strings.length);
而ArrayList只是代表其拥有保存所分配数量元素的潜力,但在实际添加元素之前,ArrayList中并不含有任何元素,如下面代码输出0:
ArrayList<String> list = new ArrayList<>(100);
System.out.println(list.size());
一旦能够确认ArrayList的大小不再变化,可以调用trimToSize方法,将存储区域的大小调整为当前所需数量的存储空间数目,垃圾回收器将回收多余的存储空间。一旦整理了ArrayList的大小,添加新元素就需要花费时间再次移动存储块,因此,应该确认不会再添加任何新元素,再调用trimToSize方法。
3.3、访问ArrayList中的元素:get()、set()、remove()
(1)set(int index,String element)方法:设置ArrayList中的第index个元素为element。
注意:只有当index小于或等于ArrayList的大小时,才可使用set()方法。
(2)get(int index)方法:获得ArrayList中的第index个元素。
(3)remove(int index)方法:删除ArrayList中的第index个元素。后面的元素向前移动。