在C++中编译时是要确定数组大小的,而Java有所不同,它允许在运行时确定数组的大小。但是如果仅通过数组是无法改变运行时无法动态更改数组的问题。一旦确定了数组大小,就很难改变他了数组的大小了,要解决这个问题,就需要引入ArrayList的类。它使用起来有点像数组,但在添加或删除元素时,具有自动调节数组容量的功能,而不需要为此编写任何代码。
ArrayList是一个采用类型参数的泛型类。为了指定数组列表保存的元素对象类型,需要用一对尖括号将类名括起来加在后面。下面是声明和构造一个保存Employee对象的数组列表
eg:ArrayList<Employee> staff = new ArrayList<Employee>();
两边都使用类型参数Employee,会有些繁琐。所以我们可以省去右边类型的参数。
ArrayList<Employee> staff = new ArrayList<>();
这可以当作一个“动态的数组”,泛型的类型时Employee,数组名是staff。
对于泛型有几种操作处理方法:
java.util.ArrayList<E>
ArrayList<E>():
构造一个空数组列表
ArrayList<E>(int initialCapacity):
用指定容量构造一个空数组列表 参数:initialCapacity 数组列表的最初容量
boolean add(E obj):
在数组列表的尾端添加一个元素。永远返回true。 参数:obj 添加的元素
staff.add(new Employee("Harry Hacker"....));
staff.add(new Employee("Tong Tester"......));
数组列表管理着对象引用的一个内部数组。最终,数组的全部空间有可能被用尽。这是若调用add且内部数组已经满了,数组列表将自动创建更大的数组,并将所有的对象从较小的数组中拷贝到较大的数组中。
int size():
返回存储在数组列表中的当前元素数量(这个值将小于或等与数组列表的容量)
void ensureCapacity(int capacity):
确保数组列表在不重新分配存储空间的情况下就能够保存给定数量的元素。 参数:capacity 需要的存储容量
如果已经清楚或能够估计出数组可能存储的元素数量,就可以在填充数组之前调用此方法,这个方法将分配合适个对象的内部数组,进行填充,而不用重新分配。
void trimToSize()
将数组列表的存储容量削减 到当前的尺寸。
一旦数组列表大小确认不再发生变化,调用这个方法,将存储区域大小调整为当前大小。
而对于设置数组列表元素,可以用set方法。例如staff.set(i,harry);
而获得数组列表元素的方法是get,例如:Employee e=staff.get(i);
这里可以介绍一下toArray方法,这个方法是将数组列表元素拷贝到一个数组中:
X[] a=new X[list.size()]; list.toArray(a);
同时这里要补充一下,add这个方法可以在列表任意位置插入元素。
而移除u元素是利用remove方法
eg:Employee e =staff.remove(n);