学习Java的过程中,用到数组时,总需要开始声明数组大小,后续也不能扩容,针对这个问题,可以自动扩容的超级数组就可以解决这个问题
全部源码
package com.SuperArray;
public class Array {
private int [] element;
private int capacity;
private int size=0;
public Array(){
this(10);
}
public Array(int size){
this.capacity=size;
this.element=new int[size];
}
public void insertItem(int item){
if(capacity-size<=5){
this.capacity=capacity*2;
int [] temp=new int [capacity];
for(int i=0;i<size;i++){
temp[i]=this.element[i];
}
temp[size]=item;
this.element=temp;
size++;
}
this.element[size]=item;
size++;
}
public int getElement(int index){
if(index>=size){
return -1;
}
return this.element[index];
}
public void deleteItem(int index){
for(int i=index;i<size;i++){
this.element[i]=this.element[i+1];
}
size--;
}
public int arrayLength(){
return this.size;
}
}
封装一个类时,成员变量权限需要设置为private,防止使用者直接可以对成员变量进行修改,在这里,我们需要三个成员变量,分别去维护数组(element)、数组元素个数(size)、数组容量(capacity)
可以看出,我准备了两个构造函数,一个是默认构造函数(当没有参数传入时,默认起始容量为10),一个是有参构造函数,可以传入一个int值作为起始容量
public Array(){
this(10);
}
public Array(int size){
this.capacity=size;
this.element=new int[size];
}
在构建类方法时,向数组中添加元素的方法最特殊,因为每一次的添加都需要判断是否自动扩容,我设置的是如果容量大小减去数组长度大小<=5时,自动扩容,扩容过程中,需要声明一个temp数组作为中转变量,将原先数组中的所有元素赋值到temp数组中后,再添加新元素,然后将element的指针指向temp数组。
向数组中删除元素时,我们只需要拿到需要删除元素的索引,然后将删除元素后的元素逐步向前移动一位,覆盖删除的元素,再让size--,即可完成删除