// 1. 索引遍歷(List 專有)
for (int i = 0; i < list.size(); i++) {
System.out.println("get: " + list.get(i));
}
// 2. 迭代器遍歷(Collection 通用)
Iterator it = list.iterator();
while (it.hasNext()) {
System.out.println("next: " + it.next());
}
| 實現類 | get(index) | iterator.next() | 推薦方式 |
|---|---|---|---|
| ArrayList | O(1) 陣列直接定址 | O(1) 遊標移動 | 兩者皆可,索引略快 |
| LinkedList | O(n) 需從頭/尾遍歷 | O(1) 節點指針移動 | 強制使用迭代器 |
ArrayList.get(i):elementData[i] 直接記憶體定址LinkedList.get(i):node(i) 從離 i 最近端點開始遍歷Iterator 內部維護 next 指針,next() 僅移動指針for (E e : list),編譯器自動轉為迭代器ListIteratorCopyOnWriteArrayList
ListIterator lit = list.listIterator();
while (lit.hasNext()) { lit.next(); }
while (lit.hasPrevious()) { lit.previous(); } // 逆向遍歷
lit.add("new"); // 插入
lit.set("modified"); // 替換
理解底層資料結構特性,選擇正確遍歷方式,是效能優化的基礎細節。