定义一个MyArray 可以改变长度的容器类
/**
* @author DouZi
* @Blog areone.top
*/
public class MyArray {
private Object[] arr; //首先声明一个Object类型的数组
private int size; //表示数组的下标 成员变量默认值为 0
//无参构造函数
public MyArray() {
this(3); //this()表示调用本类中其他的构造函数
//在本类中表示 调用 ↓ 边的有参构造方法 并且传参数为3
}
//有参构造函数---参数作用表示数组的长度
public MyArray(int initSize) {
if (initSize < 0) { //长度不合法
throw new RuntimeException("sorry 数组的长度有误。");
}
arr = new Object[initSize];
}
//把元素o放入数组arr
public void addData(Object o) {
//判断下数组是否满了
if (size > arr.length) {
//满了,需要扩容
//声明一个新的数组 把原来容器中的元素复制到新的容器中
Object[] newarr = Arrays.copyOf(arr, size * 2); //copyOf扩容2倍
// arr 指向 newarr数组 (已经扩容的)
arr = newarr;
}
//如果没超过 则直接赋值存入
arr[size] = o;
size++;
}
//根据下标获取数组中的元素。
public Object getData(int index) {
if (index >= size) {
throw new ArrayIndexOutOfBoundsException("下标越界");
}
Object o = arr[index];
return o;
}
}
测试类:
/**
* @author DouZi
* @Blog areone.top
*/
public class MyArrayTest {
public static void main(String[] args) {
MyArray my = new MyArray(3);
my.addData("java01");
my.addData("java02");
my.addData(15); //int--自动装箱Integer---Object子类
System.out.println(my);
//获取指定的元素
Object data = my.getData(1);
System.out.println(data);
}
}