//设计一个类 替代数组可以做的事情 能添加 删除 获取元素
public class ArrayBox {
//属性 最先的一个容量数组
private static final int chang = 10;
private int [] array ;
private int size = 0; //记录数组中有效的元素个数
public ArrayBox() {
array = new int [chang];
}
public ArrayBox(int mini) {
array = new int [mini];
}
public int[] getArray() {
return array;
}
public void setArray(int[] array) {
this.array = array;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
//设计一个方法 确保数组的容量
//需要提供一个条件 需要的最小容量 mini
private void queBaoRongLiang(int mini) {
if(mini-array.length>0) {
//mini-array.length>0证明需要的容量比最先的容量大 存不下 需要扩容
this.kuoRong(mini);
}
}
//设计一个方法 用来扩容
//需要提供一个条件 需要提供需求的最小容量 mini
private void kuoRong(int mini) {
//获取旧数组的长度
int oldArray = array.length;
//以旧长度扩容
int newchang = oldArray*2;
//若按照扩容后长度还不够 就直接利用mini
if(newchang - mini <0) {
newchang = mini; //最后获取到一个合理的长度 newchang
}
array = this.copyof(array, newchang);//把新数组的赋给最先的数组
}
//设计一个方法 创建一个新数组 将旧数组的元素全部移入新数组
//需要新数组的长度 newArray 需要提供旧数组 int [] array 需要返回新数组
private int[] copyof(int [] oldArray , int newchang) {
//创建一个新数组
int [] newArray = new int [newchang];
//将旧数组元素全部移入新数组
for (int i = 0; i < array.length; i++) {
newArray[i] = array[i];
}
return newArray;
}
//设计添加的方法 add
public boolean add(int cunru) {
//确保属性数组的内部容量
this.queBaoRongLiang(size+1); //如果这行代码可以执行 就证明array数组有空间;
//就可以把cunru 放进数组中 有效元素多记录一个
array [size++] = cunru;
return true;
}
//------------------------------------------------------------------------------------
//设计一个方法 检测index范围是否合法
//需要提供一个index
private void fanWeiJianCe(int index) {
if(index<0 || index>=size) {
//参考数组的异常 自己定义一个类来说明这个问题
throw new ArrayBoxYiChang("index"+index+"size"+size);
}
}
//设计获取元素的方法
//需要提供获取元素的位置 需要返回结果
public int get(int index) {
//检测index范围是否合法 >=0 <size
this.fanWeiJianCe(index); //如果这行代码可以执行 证明index合法
return array[index];
}
//------------------------------------------------------------------------------
//删除元素
//需要提供元素位置 返回删除那个元素
public int remove(int index) {
//检测index范围
this.fanWeiJianCe(index); //如果这行代码可以执行 证明index合法
//将index位置的旧值保存起来
int oldValue = array[index];
//将元素从后往前覆盖
for (int i = index; i < size-1; i++) {
array[i] =array[i+1];
}
array[size-1] = 0;
//将旧值返回给用户
return oldValue;
}
//****************************************************************************
//测试
public static void main(String[] args) {
//测试增加
ArrayBox a = new ArrayBox();
for (int i = 0; i < 21; i++) {
a.add(i*11);
}
System.out.println(“有效元素个数”+a.size);
System.out.println(“真实数组长度”+a.array.length);
//测试获取
int value = a.get(10);
System.out.println(value);
//测试删除
for (int i = 0; i < a.size; i++) {
int j = a.get(i);
System.out.println(j);
}
int remove = a.remove(2);
System.out.println(remove);
System.out.println(a.size);
for (int i = 0; i < a.size; i++) {
int j = a.get(i);
System.out.println(j);
}
}