增強for循環 -- foreach循環


1  作用

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

 

2  適用范圍

  如果是實現了Iterable接口的對象或者是數組對象都可以使用foreach循環。

 

3  格式

  for(數據類型 變量名 :遍歷的目標){


  }

 

示例:

 

1 public static void main(String[] args) { 2     HashSet<String> set = new HashSet<>(); 3     set.add("張三"); 4     set.add("李四"); 5     set.add("王五"); 6         
7 }

 

 

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

1 //使用迭代器遍歷集合
2 Iterator it = set.iterator(); 3 while(it.hasNext()){ 4     System.out.println("集合的元素為: " + it.next()); 5 }

 

有沒有更簡潔的辦法呢?可以用foreach循環

1 for(String it : set){ 2     System.out.println("集合的元素:" + it); 3 }

這個循環應該讀作 -- “循環set中的每一個元素”(for each element in set)

 

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

 

5  foreach循環應該注意的事項:

(1). foreach循環底層也是使用了迭代器獲取的,只不過獲取迭代器由jvm完成,不需要我們獲取迭代器而已,所以在使用foreach循環變量元素的過程中不准使用集合對象對集合的元素個數進行修改。

也就是說:

1 for(String it : set){ 2     System.out.println("集合的元素:" + it); 3  set.remove("it"); 4 }

上面這個調用remove方法是錯誤的!


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

 

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

 

回顧第二點,它的使用范圍,如果現在有一個Map集合,怎么對它使用foreach循環?

  通過查看API文檔可得知,Map集合沒有實現Iterable接口,所以Map集合不能直接使用foreach循環

  

  但是它有一個entrySet方法(Map的迭代方法),它的返回類型是Set<Map.Entry<K,V>>

  

 

  我們知道Set接口下是實現了Iterable接口的:

  

所以我們可以這樣:

1 HashMap<String, String> map = new HashMap<String, String>(); 2     map.put("001","張三"); 3     map.put("002","李四"); 4     map.put("003","王五"); 5     map.put("004","趙六"); 6     Set<Map.Entry<String, String>> entrys = map.entrySet(); 7     for(Map.Entry<String, String> entry : entrys){ 8         System.out.println("鍵:"+ entry.getKey()+" 值:"+ entry.getValue()); 9     }

 

最后的建議:若沒有其他操作,單單遍歷循環,能用foreach循環就用這個 

最后的最后:這是JDK1.5時才存在的!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM