数组的查询和更新操作时间复杂度为O(1),插入和删除的时间复杂度为O(n)。
public class MyArray {
private int[] array;
private int size;
public MyArray(int capacity) {
array = new int[capacity];
size = 0;
}
public static void main(String[] args) {
//数组初始化
MyArray myArray = new MyArray(4);
myArray.insert(1, 0);
myArray.insert(2, 1);
myArray.insert(3, 2);
myArray.insert(4, 3);
myArray.print();
//中间插入一个元素
myArray.insert(6, 0);
myArray.print();
myArray.insert(7, 1);
myArray.print();
myArray.insert(8, myArray.size);
myArray.print();
//删除元素
myArray.delete(1);
myArray.print();
myArray.delete(0);
myArray.print();
myArray.delete(myArray.size - 1);
myArray.print();
}
public void insert(int element, int index) {
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException("超出数组实际元素范围");
}
//判断数组是否需要扩容
if (size >= array.length) {
resize();
}
//index右侧元素循环右移一个单位,检查边界
for (int i = size - 1; i >= index; i--) {
array[i + 1] = array[i];
}
array[index] = element;
size++;
}
public int delete(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("超出数组实际元素范围");
}
int deleteElement = array[index];
//index右侧元素循环左移一个单位,注意i的边界
for (int i = index; i < size - 1; i++) {
array[i] = array[i + 1];
}
size--;
return deleteElement;
}
public void print() {
for (int i = 0; i < size; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
}
public void resize() {
int[] resizeArray = new int[array.length * 2];
System.arraycopy(array, 0, resizeArray, 0, array.length);
array = resizeArray;
}
}
输出结果:
初始数组: 1 2 3 4
头部添加元素:6 1 2 3 4
中间添加元素:6 7 1 2 3 4
尾部添加元素:6 7 1 2 3 4 8
删除中间元素:6 1 2 3 4 8
删除头部元素:1 2 3 4 8
删除尾部元素:1 2 3 4