大部分記錄均來(lái)自小灰漫畫算法
什么是數(shù)組
有限個(gè)相同變量組成的有序結(jié)合-
插入元素
數(shù)組-插入元素.png
數(shù)組擴(kuò)容
數(shù)組創(chuàng)建好之后長(zhǎng)度是固定的。數(shù)組長(zhǎng)度不夠的時(shí)候需要人為擴(kuò)容肄程。再把舊的數(shù)組元素復(fù)制到新數(shù)組中斤程。
插入元素插入后需要對(duì)數(shù)組下標(biāo)進(jìn)行調(diào)整窿侈;
- 刪除元素
基本個(gè)插入元素都差不多跌前,不過(guò)元素的當(dāng)元素?zé)o序的時(shí)候晋被,時(shí)間復(fù)雜度跟空間復(fù)雜度都為常數(shù)
private int[] array;
public MyArray(int capacity) {
array = new int[capacity];
}
/**
* 插入元素
*
* @param position:插入位置
* @param element:插入元素
*/
public void insert(int position, int element) {
//判斷異常情況
if (array.length == 0) {
return;
}
if (position < 0 || position > array.length) {
throw new IndexOutOfBoundsException("超出數(shù)組范圍");
}
//數(shù)組擴(kuò)容
while (position >= array.length - 1) {
array = reSize(array);
}
//數(shù)組元素向后移動(dòng)
for (int i = array.length - 1; i > position; i--) {
array[i] = array[i - 1];
}
//插入元素
array[position] = element;
}
/**
* 刪除元素
* @param position
*/
public void delete(int position){
//判斷異常情況
if (array.length == 0) {
return;
}
if (position < 0 || position > array.length) {
throw new IndexOutOfBoundsException("超出數(shù)組范圍");
}
if(position == array.length - 1) {
array[position] = 0;
}else{
for (int i = position ; i < array.length - 1; i++){
array[i] = array[i + 1];
}
}
}
/**
* 數(shù)組擴(kuò)容
*
* @param originalArray
* @return
*/
public int[] reSize(int[] originalArray) {
if (originalArray.length > 0) {
int[] newArray = new int[originalArray.length * 2];
//System.arraycopy:相當(dāng)于在內(nèi)存中新開(kāi)辟了一塊空間
System.arraycopy(array, 0, newArray, 0, array.length);
return newArray;
}
return null;
}
public void output() {
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
public static void main(String[] args) {
MyArray myArray = new MyArray(10);
myArray.insert(9, 10);
myArray.insert(9,1);
myArray.output();
System.out.println("===========================");
myArray.delete(9);
myArray.delete(9);
myArray.output();
}
根據(jù)上面代碼可以知道,數(shù)組在添加跟更新數(shù)據(jù)上面效率遠(yuǎn)遠(yuǎn)大于刪除和插入元素。