1. 程式人生 > >為什麼很多程式語言中陣列都從0開始編號

為什麼很多程式語言中陣列都從0開始編號

  1. 定義

陣列(array)是一種線性表資料結構。用一組連續的記憶體空間,來儲存一組具有相同型別的資料。

  1. 如何實現隨機訪問
    1. 線性表(資料排成像一條線一樣的結構)
    2. 連續的記憶體空間和相同型別的資料
  2. 定址公式
a[i]_address = base_address + i * date_type_size
  1. 容器的優勢,eg:ArrayList

將陣列的操作細節封裝起來,支援動態擴容(每次擴大為原來的1.5倍)。

注:由於擴容操作設計記憶體申請和資料搬移,比較耗時。若事先能確定需要儲存的資料大小,最好在建立ArrayList的時候事先指定書大小

  1. 容器的劣勢:

不能儲存基本資料型別,若關注效能或希望使用基本資料型別,則選用陣列

補充

位(bit) 位元組(byte)

  1. 各資料型別所佔用的位元組數
資料型別 所佔用位元組數
byte 1
short 2
int 4
long 8
float 4
double 8
char 2

陣列常用操作

    /**
     * 定義data儲存資料
     */
    private int data[];
    /**
     * 定義陣列實際長度
     */
    private int count;
    /**
     * 定義陣列容量
     */
    private int capacity;

    public
Array(int capacity) { this.data = new int[capacity]; this.capacity = capacity; this.count = 0; } /** * 找資料 * * @param index * @return */ public int find(int index) { if (index < 0 || index >= count) { return -1; }
return data[index]; } /** * 加資料 * * @param index * @param value * @return */ public boolean insert(int index, int value) { if (index < 0 || index >= count) { return false; } if (count == capacity) { return false; } for (int i = count - 1; i < count; i--) { data[i + 1] = data[i]; } data[index] = value; ++count; return true; } /** * 資料加到末尾 * * @param value * @return */ public boolean insertToTail(int value) { if (count == capacity) { return false; } data[count++] = value; return true; } /** * 刪除指定位置資料 * * @param index * @return */ public boolean delete(int index) { if (index < 0 || index >= count) { return false; } for (int i = index + 1; i < count; i++) { data[i - 1] = data[i]; } --count; return true; } /** * 列印此陣列 */ public void printAll() { for (int i = 0; i < count; i++) { System.out.print(data[i] + " "); } System.out.println(); } /** * 獲得陣列長度 * @return */ public int getCount(){ return count; }