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

Java 兩種 for 循環對比:增強 for 循環與傳統索引循環適用場景全解析

     編輯:Java 程式設計入門

代碼對比示例


List list = query.list(); // Hibernate 查詢結果

// 方式 1:增強 for 循環 (for-each)
for (House house : list) {
    System.out.println("標題:" + house.getTitle());
    System.out.println("面積:" + house.getFloorage());
    System.out.println("價格:" + house.getPrice());
    System.out.println("區:" + house.getStreet().getDistrict().getName());
    System.out.println("街道:" + house.getStreet().getName());
    System.out.println("----------------------------------");
}

// 方式 2:傳統索引循環
for (int i = 0; i < list.size(); i++) {
    House house = list.get(i);
    System.out.println("標題:" + house.getTitle());
    // ... 相同輸出邏輯
}

增強 for 循環 (for-each)

  • 語法:for (ElementType element : collection)
  • 適用對象:實現 Iterable 接口的集合(List、Set、Queue)、數組
  • 底層原理:編譯器轉換為迭代器模式
    
    // 等價轉換
    for (Iterator it = list.iterator(); it.hasNext(); ) {
        House house = it.next();
        // 循環體
    }
    
  • 優點:代碼簡潔、避免索引越界、不可變遍歷安全
  • 限制:
    • 無法獲取當前索引
    • 無法在遍歷中刪除集合元素(需使用 Iterator.remove())
    • 無法修改集合結構(添加/刪除元素)否則拋 ConcurrentModificationException

傳統索引循環

  • 語法:for (int i = 0; i < size; i++)
  • 適用場景:
    • 需要索引值(如並行處理、顯示行號)
    • 遍歷中需修改集合(倒序遍歷刪除安全)
    • 隨機訪問優勢明顯的 RandomAccess 列表(ArrayList)
    • 多集合並行遍歷
  • 性能特點:ArrayList.get(i) O(1);LinkedList.get(i) O(n) → 此時增強 for 更優

性能對比實測

集合類型增強 for索引循環推薦
ArrayList快快增強 for(可讀性)
LinkedList快 (O(n))慢 (O(n²))增強 for
數組最快快增強 for

Java 8+ 函數式替代方案


// forEach + Lambda
list.forEach(house -> {
    System.out.println("標題:" + house.getTitle());
    // ...
});

// Stream API:並行、過濾、映射
list.stream()
    .filter(h -> h.getPrice() > 100)
    .forEach(h -> System.out.println(h.getTitle()));

// 並行處理大數據量
list.parallelStream().forEach(...);

選擇決策樹

  1. 只需遍歷讀取,無索引需求 → 增強 for
  2. 需索引、需修改集合、隨機訪問 → 索引循環
  3. 需過濾/轉換/聚合 → Stream API
  4. 高性能並行處理 → parallelStream
  5. LinkedList 大量數據 → 增強 for / Iterator
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved