為什麼很多程式語言中陣列都從0開始編號
阿新 • • 發佈:2018-12-19
- 定義
陣列(array)是一種線性表資料結構。用一組連續的記憶體空間,來儲存一組具有相同型別的資料。
- 如何實現隨機訪問
- 線性表(資料排成像一條線一樣的結構)
- 連續的記憶體空間和相同型別的資料
- 定址公式
a[i]_address = base_address + i * date_type_size
- 容器的優勢,eg:ArrayList
將陣列的操作細節封裝起來,支援動態擴容(每次擴大為原來的1.5倍)。
注:由於擴容操作設計記憶體申請和資料搬移,比較耗時。若事先能確定需要儲存的資料大小,最好在建立ArrayList的時候事先指定書大小
- 容器的劣勢:
不能儲存基本資料型別,若關注效能或希望使用基本資料型別,則選用陣列
補充
位(bit) 位元組(byte)
- 各資料型別所佔用的位元組數
資料型別 | 所佔用位元組數 |
---|---|
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;
}