public class MyArray {
private int[] array;
private int size;
public MyArray(int capacity) {
this.array = new int[capacity];
size = 0;
}
/**
* 插入元素
*
* @param element
* @param index
* @throws Exception
*/
public void insert(int element, int index) throws Exception {
// 判断是否超出范围
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("超出数组实际元素范围");
}
// 扩容
if (size >= array.length) {
resize();
}
//从右向左循环,将元素逐个向右挪1位
for (int i = size - 1; i >= index; i--) {
array[i + 1] = array[i];
}
// 腾出的位置放入新元素
array[index] = element;
size++;
}
public int delete(int index) throws Exception {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("超出数组实际元素范围");
}
// 这个就是为了返回
int deleteElement = array[index];
for (int i = index; i < size - 1; i++) {
array[i] = array[i + 1];
}
size--;
return deleteElement;
}
/**
* 扩容
*/
public void resize() {
int[] arrayNew = new int[array.length * 2];
System.arraycopy(array, 0, arrayNew, 0, array.length);
array = arrayNew;
}
/**
* 打印数组元素
*/
public void output() {
for (int i = 0; i < size; i++) {
if (i == 0) {
System.out.print("[");
}
System.out.print(array[i]);
if (i < size - 1) {
System.out.print(" ");
}
if (i == size - 1) {
System.out.print("]");
}
}
}
public static void main(String[] args) throws Exception {
MyArray myArray = new MyArray(10);
myArray.insert(3, 0);
myArray.insert(5, 1);
myArray.insert(4, 2);
myArray.insert(1, 1);
myArray.delete(0);
myArray.output();
}
}
注意点:
- 左右移的方法
a[i]=a[i+1] a[i+1]=a[i]
- for循环结束条件以及for循环中i的初始值
这也是为什么数组适合查询(有索引)而不太适合删除和添加(数据要移动)