数据结构的插入与删除
初始化
public class ArrayList {
int size = 0;//记录有效数据的个数
int capacity =10; //数组容量
int[] arr = new int[capacity];
double factor = 1.5;//因数 1.5
打印数组(相当于toString)
public String toString() {
String res = "[";
for(int i=0;i<size;i++) {
if(i==size-1) {
res+=arr[i];
}else {
res+=arr[i]+", ";
}
}
res+= "]";
return res;
}
尾插的第一步就是判断数组空间是否还有空闲;
而且String类型是不可变的,所以一旦满数组后,需要进行扩容
public void add(int element) {
if(size == capacity) {
//数组满了,扩容
capacity = (int)(capacity*factor);//强制类型转换
int[] brr = new int[capacity];
for(int i=0;i<arr.length;i++) {
brr[i] = arr[i];
}
arr=brr;
}
//插入数据
arr[size]=element;
size++;
}
指定位置插入
//指定位置插入
public void insert(int value,int position) {
//判断位置是否合理
if(position>size||position<0) {
System.out.println("插入位置不合理");
return;
}
if(size == capacity) {
//数组满了,扩容
capacity = (int)(capacity*factor);//强制类型转换
int[] brr = new int[capacity];
for(int i=0;i<arr.length;i++) {
brr[i] = arr[i];
}
arr=brr;
}
//数组有空间进行插入
//插入位置及其之后的数据,从后往前的顺序统一往后移动
for(int i=size-1;i>=position;i--) {
arr[i+1]=arr[i];
}
//插入
arr[position]=value;
size++;
}
删除一个符合条件的数据
//删除第一个符合条件的数据
public boolean delFirst(int value) {
//查找元素
for(int j=0;j<size;j++) {
if(arr[j]==value) {
//删除,j后面的数据都要向前移动一位
for(int i=j+1;i<size;i++) {
arr[i-1]=arr[i];
}
size--;
return true;
}
}
return false;
}
删除所有符合条件的数据
//从后往前删,可以删干净
public boolean delAll(int value) {
boolean hasDeleted = false;
for(int k=size-1;k>=0;k--) {
if(arr[k]==value) {
for(int m=k+1;m<size;m++) {
arr[m-1]=arr[m];
}
size--;
hasDeleted = true;
}
}
return hasDeleted;
}