首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 增強 for 循環完全指南:語法、原理與避坑實戰

     編輯:Java 相關知識

什麼是增強 for 循環?

Java 5 引入的增強 for 循環(Enhanced for Loop),又稱「for-each 循環」,是遍歷數組與 Iterable 集合的語法糖。它將「獲取迭代器 → 判斷有無下一個 → 取值」的樣板代碼封裝為簡潔的聲明式語法,極大提升了代碼可讀性。

基本語法與適用場景

// 數組遍歷
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
    System.out.println(num);
}

// List/Set 遍歷
List<String> names = List.of("Alice", "Bob", "Charlie");
for (String name : names) {
    System.out.println(name);
}

// Map 遍歷(需配合 keySet/entrySet)
Map<String, Integer> scores = Map.of("Math", 95, "English", 88);
for (String subject : scores.keySet()) {
    System.out.println(subject + " = " + scores.get(subject));
}

// 推薦:Map 直接遍歷 Entry 避免二次查找
for (Map.Entry<String, Integer> entry : scores.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}

編譯器「二次加工」原理揭秘

增強 for 循環純屬編譯期語法糖,javac 會將其還原為基於索引或迭代器的普通循環。以數組為例:

// 源碼
for (int num : numbers) { ... }

// 編譯後等效字節碼邏輯
int[] arr = numbers;
for (int i = 0; i < arr.length; i++) {
    int num = arr[i];
    ...
}

對於 Iterable 集合,則轉換為迭代器模式:

Iterator<String> it = names.iterator();
while (it.hasNext()) {
    String name = it.next();
    ...
}

結論:增強 for 無運行時性能損耗,純粹是編譯器幫你寫樣板代碼。

四大核心限制(必須牢記)

限制說明替代方案
無法獲取索引遍歷數組/List 時拿不到下標改用普通 for 或 IntStream.range
無法反向/跳躍遍歷只能從頭到尾、步長為 1普通 for / ListIterator / Stream API
無法安全刪除元素循環中直接 list.remove() 拋 ConcurrentModificationException用 Iterator.remove() 或 Stream filter
無法修改數組/集合結構無法在遍歷中添加元素收集需操作的元素,循環外統一處理

Map 遍歷的最佳實踐

Map 未實現 Iterable,不能直接用增強 for。三種常見姿勢:

  1. 只需 Key:for (K key : map.keySet())
  2. 只需 Value:for (V val : map.values())
  3. 需 Key-Value 且避免二次查找(推薦):for (Map.Entry<K,V> e : map.entrySet())

Java 8+ Stream API 的現代替代

對於複雜業務邏輯(篩選、轉換、聚合),Stream API 往往更優雅:

// 篩選分數 > 90 的科目並轉大寫輸出
scores.entrySet().stream()
      .filter(e -> e.getValue() > 90)
      .map(Map.Entry::getKey)
      .map(String::toUpperCase)
      .forEach(System.out::println);

總結

增強 for 循環是 Java 遍歷集合的「標準動作」,代碼簡潔、語義清晰、零性能損耗。但面對「需要索引、逆序、刪除、複雜邏輯」等場景時,果斷切換到普通 for、Iterator 或 Stream API,才是成熟工程師的選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved