增強for迴圈 foreach迴圈

2021-08-01 06:01:13 字數 1683 閱讀 9317

1  作用

簡化迭代器的書寫格式。(注意:foreach迴圈的底層還是使用了迭代器遍歷。)

2  適用範圍

如果是實現了iterable介面的物件或者是陣列物件都可以使用foreach迴圈。

3  格式

for(資料型別 變數名 :遍歷的目標)

示例:

1

public

static

void

main(string args)

若想遍歷這個集合,可以用迭代器

1

//使用迭代器遍歷集合

2 iterator it =set.iterator();

3while

(it.hasnext())

有沒有更簡潔的辦法呢?可以用foreach迴圈

1

for(string it : set)

這個迴圈應該讀作 -- 「迴圈set中的每乙個元素」(for each element in set)

4  foreach迴圈的優點在於:相比普通for迴圈來更加簡潔,更加不容易出錯(不必為陣列下標的起始值和終止值擔心)

5  foreach迴圈應該注意的事項:

(1). foreach迴圈底層也是使用了迭代器獲取的,只不過獲取迭代器由jvm完成,不需要我們獲取迭代器而已,所以在使用foreach迴圈變數元素的過程中不准使用集合

物件對集合的元素個數進行修改。

也就是說:

1

for(string it : set)

上面這個呼叫remove方法是錯誤的!

(2). 普通for迴圈與foreach迴圈的區別:普通for迴圈可以沒有變數的目標,而foreach迴圈一定要有變數的目標。

6  缺點:在對陣列索引進行操作或者集合進行增刪操作時,顯得力不從心,此時不建議使用foreach迴圈

回顧第二點,它的使用範圍,如果現在有乙個map集合,怎麼對它使用foreach迴圈?

通過檢視api文件可得知,map集合沒有實現iterable介面,所以map集合不能直接使用foreach迴圈

但是它有乙個entryset方法(map的迭代方法),它的返回型別是set>:

我們知道set介面下是實現了iterable介面的:

所以我們可以這樣:

1 hashmapmap = new hashmap();

2 map.put("001","張三");

3 map.put("002","李四");

4 map.put("003","王五");

5 map.put("004","趙六");

6 set> entrys =map.entryset();

7for(map.entryentry : entrys)

最後的最後:這是jdk1.5時才存在的!

foreach迴圈(增強for迴圈)

1 foreach迴圈本質上是迭代器遍歷,簡化了迭代器遍歷的書寫方式 2 適用於實現了iterable介面的物件或者陣列物件 3 格式為 for 資料型別 變數名 迴圈目標 foreach迴圈 for string it set foreach缺點 1 不能對集合進行增刪操作 foreach迴圈底層...

增強的for迴圈(或foreach)

增強的for迴圈 也稱為foreach迴圈 不用下標變數,順序的訪問整個陣列。不能以其它順序訪問陣列,或者改變陣列的元素。for elementtype element arrayrefvar emement必須宣告為與陣列中元素同樣的資料型別 增強for迴圈僅僅能用在陣列和實現iterator介面...

集合 三 增強for迴圈 for each

格式 for 元素的資料型別 變數 collection集合 or 陣列 增強for迴圈 底層使用的也是迭代器,使用for迴圈的格式,簡化了迭代器的書寫 collectionextends iterator 所有的單列集合都可以使用增強for public inte ce iterator實現這個介...