// 陣列
int[] numbers = {1, 2, 3, 4};
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
// Collection (需 Iterator)
String[] strs = {"A", "B", "C", "D"};
Collection list = Arrays.asList(strs);
for (Iterator it = list.iterator(); it.hasNext(); ) {
System.out.println(it.next());
}
// 陣列
for (int n : numbers) {
System.out.println(n);
}
// Collection / Iterable
for (String s : list) {
System.out.println(s);
}
it.hasNext() / it.next())實作 Iterable<T> 介面並提供 iterator() 方法:
public class MyContainer implements Iterable {
private List items = new ArrayList<>();
public void add(T item) { items.add(item); }
@Override
public Iterator iterator() {
return items.iterator(); // 或自訂 Iterator 實作
}
}
// 使用
var container = new MyContainer();
container.add("A");
container.add("B");
for (String s : container) { // 編譯器自動呼叫 iterator()
System.out.println(s);
}
| 限制 | 說明 |
|---|---|
| 無索引存取 | 需索引時請用傳統 for |
| 無法移除元素 | 需移除請用 Iterator.remove() 或串流 API |
| 無法修改陣列/集合結構 | 迴圈中增刪會拋 ConcurrentModificationException |
| 迴圈變數為副本 | 修改迴圈變數不影響原集合元素 (基本型別/參考傳值) |