相信很多初學者對於陣列和串列常常會搞不清楚, 在寫程式的時候常常不知道該使用哪一個, 這篇文章可以讓你快速了解其中的差別
什麼是陣列 (Array)
固定大小的置物櫃排
陣列就像是一個固定大小的置物櫃排, 其有以下幾項的特性
- 固定大小 : 一開始建立陣列時就比需要決定他能存多少資料, 之後是無法改變。
- 每格資料型態相同:例如全部都是整數, 或者其他全部都是字串。
- 透過編號 (Index) 快速存取 : 例如 array[0], array[1], 速度很快。

Java 為例
int[] numbers = new int[5] // 建立一個長度為 5 的 int 陣列
int[] numbers = {10, 20, 30, 40, 50}; // 一開始就給初始數值
陣列在什麼情況下好用 ?
- 資料數量固定時 (例如一年固定 12 個月)。
- 需要速度快, 操作簡單。
- 每個元素都是同一種資料型態。
什麼是串列 (List)
可以一直加格子的置物籃
串列就像是置物籃上面可以持續的加入掛勾, 以下是串列的特性
- 大小可變 : 想加入資料就加入, 想刪就刪。
- 資料型態可以不同 : 同一個串列可以放字串,數字,布林值等不同類型。
- 存取速度比陣列稍慢:因為不是固定長度的連續記憶空間。
Java 為例
Java 的串列指的是 List 介面, 最常用的實作是:ArrayList,LinkedList
其中兩者差別主要在 LinkedList 的記憶體位置不連續, 每個節點都包含 data + 下一個節點的位址 (指標) , 而 ArrayList 在記憶體中的位置是連續的, 如果裝滿需要整排換到更大的空間。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// 創建新的物件
ArrayList<Integer> list = new ArrayList<>();
// 增加數值進去
list.add(1);
list.add(2);
list.remove(Integer.valueOf(3)) // 移除數字3
// 取得數值
list.get(1);
}
}
什麼時候使用 ArrayList
常用功能是讀取資料 get(Index), 不常在中間插入或刪除, 資料量大但讀取比變動多, 存取入度較快。
典型例子 : 成績表 商品清單 玩家列表 排行榜
什麼時候使用 LinkedList
常常需要在中間或頭部插入 / 刪除, 幾乎不需要使用 get(index) 來找資料, 讀取速度慢城市當中比較少用。
典型例子 : 佇列 Queue Deque, 多比資料需要頻繁插入刪除
總結
- Array(陣列):固定大小、速度快、型態統一。
- List / ArrayList(串列):大小可變、功能多、用來處理不固定數量的資料。



