实现ArrayList接口
public interface IArrayList {
//增/删
/**
* 把item插入到线性表前面
* @param item 要插入的数据
*/
void pushFront(int item);
/**
* 把item插入到线性表的后面
* @param item 要插入的数据
*/
void pushBack(int item);
/**
* 把item插入到index位置,index位置的数据后移
* @param item
* @param index
*/
void add(int item,int index);
/**
* 删除前面的数据
*/
void popFront();
/**
* 删除后面的数据
*/
void popBack();
/**
* 删除index处的数据,index后的数据前移
* @param index
*/
void remove(int index);
}
实现顺序表
public class MyArrayList implements IArrayList {
private int[] array;//保存数据的空间
private int size;//保存有效数据个数
MyArrayList(int capacity){
this.array= new int[capacity];
this.size = 0;
}
顺序表头插
@Override
public void pushFront(int item) {
//头插 O(n)
//将顺序表中已有的数据后移一个,从后往前搬
for(int i =this.size;i>=1;i--){
this.array[i] = this.array[i-1]; //数据下标与空间下标的关系 空间[size,1] 数据[size-1,0]
// array[空间]=array[数据]+1;
}
this.array[0] = item;
this.size++;
}
顺序表尾插
@Override
public void pushBack(int item) {
//尾插 时间复杂度:O(1)
this.array[this.size] =item;
this.size++;
}
顺序表指定下标插入
@Override
public void add(int item, int index) {
//中间插入
//i表示要插入数据的下标
for(int i=this.size-1;i>=index;i--){
this.array[i+1] = this.array[i];//数据往后移一个,插入item
}
this.array[index] = item;
this.size++;
}
顺序表头删
@Override
public void popFront() {
//头删
for(int i = 1;i<this.size;i++){
this.array[i-1] =this.array[i];
}
this.size--;
}
顺序表尾删
@Override
public void popBack() {
//尾删 O(1)
if(this.size == 0){
throw new Error();
}
this.array[--this.size] = 0;
}
顺序表指定下标删除
@Override
public void remove(int index) {
//指定下标删除
for(int i = index;i<this.size-2;i++){
this.array[i] = this.array[i+1];
}
this.size--;
}