「迭代是通過循環實現的,但循環不一定是迭代」——這句話精準概括了兩者的包含關係。深入理解有助於寫出更具表達力的代碼。
| 維度 | 循環 | 迭代 |
|---|---|---|
| 本質 | 控制流語句,重複執行代碼塊 | 遍歷容器元素的行為模式 |
| 關注點 | 「重複幾次」「什麼條件停止」 | 「依次訪問每個元素」「不暴露內部結構」 |
| 典型語法 | for/while/do-while | for-each、Iterator、Stream |
| 耦合度 | 可能依賴索引、長度等容器細節 | 面向抽象接口(Iterable),與實現解耦 |
Iterator it = list.iterator();
while (it.hasNext()) {
String s = it.next();
// 處理元素,可安全 remove()
}
for (String s : list) { // 編譯器自動轉為 Iterator 模式
// 僅讀遍歷,不可修改集合結構
}
list.stream()
.filter(s -> s.length() > 3)
.forEach(System.out::println);
// 聲明式風格,支持並行、鏈式操作
for (int i=0; i 或 ListIterator for-each 最佳可讀性Stream API 表達力最強迭代器模式將「遍歷算法」從「聚合對象」中分離,使聚合對象無需暴露內部結構即可支持多種遍歷方式。Java 集合框架完美實踐了此模式:
Collection 繼承 Iterable → 統一入口Iterator 實現 → 封裝遍歷邏輯fail-fast 機制檢測并發修改 → 安全性保障理解「循環是機制,迭代是意圖」,能讓代碼更貼近業務語義,降低維護成本。