代碼對比示例
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 (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(...);
選擇決策樹
- 只需遍歷讀取,無索引需求 → 增強 for
- 需索引、需修改集合、隨機訪問 → 索引循環
- 需過濾/轉換/聚合 → Stream API
- 高性能並行處理 → parallelStream
- LinkedList 大量數據 → 增強 for / Iterator