Java中可以用泛型类数组ArrayList类解决程序在运行时数组大小改变的问题,在添加或删除元素时,可以自动调节数组容器的大小。指定存放对象的类型,需要将类型标注在尖括号内,并添加在ArrayList的后面,例如ArrayList。以下语句将声明和构造一个存放Employee类型对象的数组列表:
ArrayList<Employee> arrEmp=new ArrayList<Employee>();
从Java 7以后,可以省去后面的类型参数:
ArrayList<Employee> arrEmp=new ArrayList<>();
通过add方法可以向arrEmp数组列表中添加对象,数组列表管理着一个对象引用的内部数组,当内部数组空间用尽后,数组列表将会自动创建一个更大的数组,并将所有对象从小数组拷贝到大数组中,如果预先清楚可能存储的元素数量,可以使用ensureCapacity()方法扩展,为他传递一个整型参数作为容量,例如ensureCapacity(100),那么将分配一个可以包含100个对象的内部数组。
这里的100,指的是如果在初始化时设置可以包含100个对象,那么该数组列表也根本不含有任何元素,但若通过Employee[] emps=new Employee[100]语句创建数组,表示已经为其开辟了可以存放100个对象内存空间,不论有没有元素,这100个空间都是在被占用的状态。
一旦能够确认数组列表的大小不再发生变化,就可以调用trimToSize()方法。这个方法将存储区域的大小调整为当前元素数量所需要的存储空间数目,垃圾回收器将回收多余的存储空间。在开发过程中注意的是,一旦整理的数组列表的大小,如果再次添加新元素就需要花时间再次移动存储块,所以应该在确认不再添加任何元素之后再调用trimToSize()方法。
访问和改变数组列表元素使用get(index)和set(index,objectValue)方法,set()方法在数组列表中存在元素时才可以正常使用,否则会产生异常,get()方法返回值是Object类型,所以都需要进行类型转换。
使用add(index,objectValue)方法可以在索引位置插入对象,index之后的所有元素向后移动一个位置,remove(index)方法可以移除当前索引位置的对象,当前位置之后的所有元素向前移动一个位置。需要注意的是,该方法在处理数目较大的元素时效率较低,所以此时可以使用链表操作较大数组的增删改。