ArrayList作用:
众所周知,一旦确定了数组的大小,改变它就不容易了。不过ArrayList类就可以解决动态更改数组大小的问题。ArrayList使用起来有点像数组,但是在添加和删除元素时,具有自动调节数组容量的功能,而不需为此编写任何代码。
ArrayList管理着对象引用的一个内部数组。最终,数组的全部空间有可能被用尽。这就显现出ArrayList的操作的优势所在:如果调用add方法但是内部数组已经满了,ArrayList就将自动地创建一个更大的数组,并将所有的对象从较小的数组中拷贝到较大的数组中。
ArrayList的容量与数组的大小的区别:
如果为数组分配100元素的存储空间,数组就有100个空位置可以使用,但是容量是100的ArrayList只是拥有保存100个元素的潜力(实际上,重新分配空间的话,将会超过100),但是在最初,甚至完成初始化构造之后,ArrayList根本就不含有任何元素。
eg:
package com.myself.test;
import java.util.ArrayList;
public class Mytest {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList(100);
System.out.println("ArrayList的容量:"+array.size());
String[] s = new String[100];
System.out.println("数组的长度:"+s.length);
for(int i=0;i<150;i++){//当向ArrayList中添加大于ArrayList初始化定义的容量的元素个数
array.add("zhangyaohui");
}
System.out.println("ArrayList的容量:"+array.size());
for(int i=0;i<150;i++){//当向数组中添加大于数组初始化定义的大小的元素个数
s[i] = "zhangyaohui";
}
}
}
结果:
ArrayList的方法:
1.构造方法:
ArrayList<T> : 构造一个空数组列表
ArrayList<T>(int initialCapacity): 用指定容量构造一个空数组列表 参数: initialCapacity 数组列表的最初容量
2.常用方法:
size(): 返回存储在数组列表中的当前元素数量。
ensureCapacity(int capacity): 确保数组列表在不重新分配存储空间的情况下就能够保存给定数量的元素。 参数:capacity 需要的存储容量
trimToSize(): 将数组列表的存储容量消减到当前尺寸。
set(int index,T obj): 设置数组列表指定位置的元素值,这个操作将覆盖这个位置的原有内容。
get(int index): 获得指定位置的元素值。
add(T obj): 在数组列表的尾端添加一个元素。
add(int index,T obj): 向后移动元素,以便插入元素。
remove(int index): 删除一个元素,并将后面的元素向前移动。被删除的元素又返回值返回。
ArrayList的缺点:
ArrayList自动扩展容量的便利增加了访问元素语法的复杂程度。
既可以灵活的扩展数组,又可以方便地访问数组元素的方法:(实际上就是通过ArrayList与数组之间的转换实现的)
package com.myself.test;
import java.util.ArrayList;
public class Mytest {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList();
for(int i=0;i<6;i++){//当向ArrayList中添加大于ArrayList初始化定义的容量的元素个数
array.add("zhangyaohui");
}
String[] s = new String[array.size()];//初始化一个跟ArrayList的容量大小一致的数组
array.toArray(s);//将ArrayList转换成数组
for(String a:s){//遍历数组
System.out.println(a);
}
}
}
结果:
注意:
对数组实施插入和删除元素的从操作其效率比较低。对于小型数组来说,这一点不必担心。但如果数组存储的元素数比较多,又经常需要在中间位置插入、删除元素,就应该考虑使用链表了。