public class MyArrayList implements IArrayList{ private int[] array; //保存数据的空间 private int size; //保存有效数据个数 MyArrayList(int capacity){ this.array = new int[capacity]; this.size = 0; } //O(n) @Override public void pushFront(int item) { ensureCapacity(); //将数据中已有的数据后移一格 for (int i = this.size;i>=1;i--){ this.array[i] = this.array[i-1]; } this.array[0] = item; this.size++; } //O(1) @Override public void pushBack(int item) { ensureCapacity(); this.array[this.size] = item; this.size++; } //最坏时间复杂度O(n) @Override public void add(int item, int index){ if(index < 0||index > this.size){ throw new Error(); } ensureCapacity(); //i代表的是数据所在的下标 for (int i = this.size - 1; i >= index; i--) { this.array[i + 1] = this.array[i]; } this.array[index] = item; this.size--; } /** * i代表循环的次数 * for(int i=0;i<this.size-index;i++){ * this.array[this.size-i]=this.array[this.size-i-1]; * } */ //O(n) @Override public void popFront() { if(this.size == 0){ throw new Error(); } for(int i=1;i<this.size;i++){ this.array[i-1]=this.array[i]; } /** for(int j=0;j<this.size-1;j++){ this.array[j]=this.array[j+1]; } */ this.size--; } //O(1) @Override public void popBack() { if(this.size == 0){ throw new Error(); } //this.array[--this.size] = 0; this.size--; } //O(n) @Override public void remove(int index) { if(index < 0||index > this.size){ throw new Error(); } if(this.size == 0){ throw new Error(); } for(int i=index;i<this.size-2;i++){ this.array[i]=this.array[i+1]; } size--; } //O(n) /** * 保证数组容量够用 */ private void ensureCapacity() { if (this.size < this.array.length) { return; } //1、找新房子,找原来的2倍大小 int capacity = this.array.length * 2; int[] newArray = new int[capacity]; //2、搬家 for(int i = 0;i<this.size;i++){ newArray[i] = this.array[i]; } //3、去学校登记新房子的位置,退掉新房子 this.array = newArray; } }
数组的各种插入/删除
猜你喜欢
转载自blog.csdn.net/family_love_1998/article/details/88963091
今日推荐
周排行