ArrayList类使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能
ArrayList是一个采用类型参数的泛型类
Java SE 7中,可以省去右边的类型参数,被称为菱形语法
Java SE 5.0以前的版本没有提供泛型类,而是一个ArrayList类,其中保存类型为Object的元素,它是“自适应大小”的集合
使用老版本的Java则需要将所有的后缀<...>删掉
如果调用add且内部数组已经满了,数组列表就将自动创建一个更大的数组,并将所有的对象从较小的数组中拷贝到较大的数组中
如果已经清楚数组需要的元素数量,可以在填充数组之前调用ensureCapacity方法
一旦确认数组大小不再变化就可以使用trimToSize方法,GC将回收多余的存储空间
1.java.util.ArrayList<E> 1.2:
ArrayList<E>()
构造一个空数组列表
ArrayList<E>(int initalCapacity)
用指定容量构造一个空数组列表
boolean add(E obj)
在数组列表的尾端添加一个元素。永远返回true
int size()
返回存储在数组列表中的当前元素数量
void ensureCapacity(int capacity)
确保数组列表在不重新分配存储空间的情况下就能够保存给定数量的元素
void trimToSize()
将数组列表的存储容量削减到当前尺寸
2.访问数组列表元素:
访问ArrayList中的元素只能通过get和set方法,因为这是放在标准库的一个类不是Java程序设计语言的一部分
没有泛型类时,原始的ArrayList类型提供的get方法只能返回Object,所以需要类型转换。例如:Employee e = (Employee)s.get(i);
使用原始ArrayList存在一个问题,在add和set时允许接收任意类型参数的对象,例如:s.set(i,"sss");编译的时候不会报错,只有在检索对象并试图对它进行类型转换时才会出问题。
3.java.util.ArrayList<T> 1.2:
void set(int index,E obj)
设置数组列表指定位置的元素值,这个操作将覆盖这个位置的原有内容
E get(int index)
获得指定位置的元素值
void add(int index,E obj)
向后移动元素,以便插入元素
E remove(int index)
删除一个元素,并将后面的元素向前移动,被删除的元素由返回值返回
4.类型化与原始数组列表的兼容性:
编译器在对类型转换进行检查之后,如果没有发现违反规则的现象,就将所有的类型化数组列表转换为原始ArrayList对象
在程序运行时,所有的数组列表都是一样的,即没有虚拟机中的类型参数