數據結構與演算法(二)數組

  • 2019 年 10 月 8 日
  • 筆記

數組:

在堆中連續開闢的一段空間,每個元素佔有相同大小的空間。一經開闢,即固定大小,無法改變長短。

對數組如何增刪查改

插入

public void insetAtIndex(int index, int element) {    cheakRange(index); // 檢查插入的是否超過數組開闢範圍    cheakCapicity(); // 看是否需要擴容      for (int i = size; i > index; i--) {      elementDatas[i] = elementDatas[i - 1];    }    elementDatas[index] = element;  }
數組的插入操作 效率很低 如果數組長度特別大,在首部附近插入數據,將會把幾乎所有的數組數組都要向後移動。

刪除

public int removeAtIndex(int index) {    // 檢查刪除的是否超過數組開闢範圍    cheakRange(index);      int old = elementDatas[index];    for (int i = index + 1; i < size; i++) {      elementDatas[i - 1] = elementDatas[i];    }    //清空最後的空間  	elementDatas[index] = null;  }

查詢

通過角標偏移就可以找到對應的數組。由於記憶體地址是連續的 所查數據只要是(查找數據index*偏移量)。
public int get(int index) {  	// 判斷查找的是否在範圍內  		cheakRange(index);  		return elementDatas[i];  }

替換

在查找的基礎上直接替換就可以
elementDatas[i] = element;
  • 優點:查找,替換快
  • 缺點:插入刪除效率低

注意:在數組增刪查改的時候,要判斷是否在數組範圍內操作。

在增加的時候,如果超過數組開闢空間範圍,要對數組進行擴容:重新創建一個更大的數組,再將舊數組內容拷貝過去,再進行操作。