我们都知道数组是线性的、类型固定、内存地址连续、定长的,主要是数组一旦被定义,那么它的长度也就定下来了,只能添加有限的数据。而长度可变的数组是要将这个长度打破,实现数组数据无限增加
那么定义长度可变的数组就可以用两个数组来实现数组长度的变化。为了避免每次增加数据或删除数据时都要重新开辟空间,我先设定原数组为固定长,在当数组放满时,一次增加一定的长度,这样 节省了开辟空间的时间
因为数组里的数据类型是不确定的,所以用泛型比较好
public class MyList {
private int rongliang;//容量
private int zengliang;//增量
private int num;//数量
//定义一个原数组
//Object类包含所有的类型,所以定义数组是用Object类
private Object[] src;
//三个不同的构造方法
public MyList(){
this(10,10);
}
public MyList(int rongliang){
this(rongliang,10);
}
public MyList(int rongliang,int zengliang){
this.rongliang = rongliang;
this.zengliang = zengliang;
src = new Object[rongliang];
}
}
在MyList中实现在数组中添加数据,要考虑到数组中的数据数量小于数组长度时,可以直接在数组为null处添加数据,但当数组的数量大于等于数组长度时,要先重新定义一个数组,长度是原数组加增量,然后再添加数据
public void add(E s){
//判断数组中的数据数量num是否大于数组的长度(容量),超出则需扩容
if(num>=src.length){
//定义一个新的数组,长度是原有的长度加增量
Object arr[] = new Object[src.length+zengliang];
//拷贝数组数据
System.arraycopy(arr, 0, arr, 0, src.length);
src = arr;
}
//如果num不大于数组的长度,则不需扩容,直接加入
//如果num大于等于数组长度,则需执行上面的if语句扩容,再加入数据
//最后num++
src[num++] = s;
}
取出指定下标