ArrayList是java的一种集合类,它的底层是一个可变数组,可以存放任何Object的协变类型的引用,即java中的所有对象。通过模拟实现ArrayList集合类,可以帮助我们了解其底层实现原理,以及简单泛型的使用。
在MyArrayList类中有一个泛型数组,用于存放元素,以及最大容量capacity和目前存放元素的数量size,目的是为了方便统计,以及后面的扩容操作。给该类提供了一个无参的构造方法(默认初始容量为10),和带参构造方法(指定初始容量)。需要注意的是data为泛型数组,然而泛型数组不能直接new,我们暂且只能先创建一个Object类型的数组然后将其强制类型转换为泛型数组。
public class MyArrayList<T> {
private int capacity;//最大容量
private T[] data;
private int size;//目前存储元素的数量
public MyArrayList(){
this.capacity=10;
this.data=(T[])new Object[capacity];
}
public MyArrayList(int capacity) {
this.capacity = capacity;
this.data=(T[])new Object[capacity];
}
然后我们为其提供添加元素的方法。使用者可以默认直接添加一个元素在数组末端,或者是将一个元素添加到指定位置,此时就需要将后面的元素依次往后移一位。需要注意的是添加元素前需要先检查顺序表是否已满,如果已装满则需要先扩容。当使用者指定下标时,需要先