1、ArrayList介绍
一般的数组需要提前确定数组的大小,而一旦确定数组大小之后,改变它就不太容易了,而且对于不知道元素数量的情况就不太友好了。
解决该问题的方法是使用Java中的ArrayList类,它是一种可以在增加或删除元素时自动调节数组容量的一种数组。
2、ArrayList基本使用
(1)声明和创建
ArrayList是一个采用类型参数的泛型类,所以也叫做泛型数组列表。为了指定数组列表保存的元素对象类型,需要用一对尖括号 '<>'将类名括起来加在后面:ArrayList<E> arr_name = new ArrayList<E>(); 其中E表示数组要存储的元素类型。
// 声明和构造一个保存Employee对象的数组列表
ArrayList<Employee> staff = new ArrayList<Employee>();
// 右边类型参数可以省略
ArrayList<Employee> staff = new ArrayList<>();
// 也可以像普通数组那样,规定数组初始容量
ArrayList<Employee> staff = new ArrayList<>(100);
// 这只表明动态数组staff拥有保存100个元素的潜力,实际上可以保存更多的元素,这是与普通数组不同的地方
(2)添加元素——add()方法
使用add()方法可以将元素添加到数组列表中
// 在动态数组staff尾部添加元素
staff.add(new Employee(...));
// 在指定位置添加元素
int n = staff.size() / 2;
staff.add(n, e);
(3)删除元素——remove()方法
// 删除staff指定位置元素
Employee e = staff.remove(n);
(4)数组列表元素个数——size()
size()方法返回数组列表中实际包含的元素数量,等价于数组a的a.length。
// 求staff的实际元素数量
int size = staff.size();
(4)访问数组列表元素——set()和get()
不同于数组直接用索引下标 [ ]的语法格式直接访问元素,元素列表ArrayList要通过get和set方法实现访问或改变数组元素的操作。
// 更改第i个元素
staff.set(i, harry); // 将staff中元素i,更改为harry,等价于 a[i] = harry
// set方法只能替换数组中已经存在的元素内容,而add方法是添加新的元素,不要混淆了
// 获得数组列表元素
Employee e = staff.get(i); // 等价于 Employee e = a[i]
(5)使用 for each 循环遍历数组列表
// for each 遍历数组列表
for(Employee e : staff){
do somethin with e;
}
// 以上代码等同于以下
for(int i = 0; i < staff.size(); i++){
Employee e = staff.get(i);
do somethin with e;
}
(6)ArrayList灵活运用
下面这个技巧可以一举两得,既可以灵活扩展数组,又可以方便访问数组元素。
首先,创建一个动态数组,并添加所有元素
// 创建动态数组
ArrayList<X> list = new ArrayList<>();
// 添加元素
list.add(x1);
lsit.add(x2);
......
然后,使用toArray方法将动态数组元素拷贝到一个数组中
// 创建普通数组
X[] a = new X[list.size()];
// 动态数组内容拷贝到普通数组中
list.toArray(a);
这样就可以通过普通数组的 [ ] 语法格式访问数组了