foreach(增強for循環)和for的區別


https://www.cnblogs.com/XiaojianGo/p/7471860.html

 

 

首先說一下foreach有的也叫增強for循環,foreach其實是for循環的一個特殊簡化版。

  再說一下foreach的書寫格式:

     for(元素類型  元素名稱 : 遍歷數組(集合)(或者能進行迭代的)){

      語句

     }

  foreach雖然是for循環的簡化版本,但是並不是說foreach就比for更好用,foreach適用於循環次數未知,或者計算循環次數比較麻煩情況下使用效率更高,但是更為復雜的一些循環還是需要用到for循環效率更高。

  我們看看下面的例子:

復制代碼
 1 public static void main(String[] args) {
 2         List<String> arr = new ArrayList<String>();
 3         arr.add("你好");
 4         arr.add("我好");
 5         arr.add("大家好");
 6         
 7         //foreach循環
 8         for(String str : arr){                      //這里的str就是為了獲取每次循環的arr中的值
 9             System.out.println(str);               //就相當於 String str=arr[i]
10         }
11     }
復制代碼

  但是相比較之下我們用for循環輸入就略顯麻煩

復制代碼
public static void main(String[] args) {
        List<String> arr = new ArrayList<String>();
        arr.add("你好");
        arr.add("我好");
        arr.add("大家好");
        
        //for循環
        for(int i=0;i<arr.size();i++){
            System.out.println(arr.get(i));    //要獲取list中元素需要用get方法    
        }
    }
復制代碼

 

  除了這種普通的集合還可以對像map這種鍵值對使用

  例如: 

復制代碼
public static void main(String[] args) {
        Map<String,String> mapstr = new HashMap<String,String>();
        mapstr.put("王", "男");
        mapstr.put("李", "男");
        mapstr.put("張", "女");
                            //entrySet方法是為了獲取鍵值對的集合
        for(Map.Entry<String, String> s : mapstr.entrySet()){   //這里的Map.Entry<String, String>其實就是一個類型 用來表示鍵值對的類型
            System.out.println("key="+s.getKey());            //這里其實還是相當於 s=maostr.entrySet,只不過s存儲的是鍵值對。
            System.out.println("value="+s.getValue());        //所以可以用get方法獲取出來存儲的鍵值對。
        }
    }
復制代碼

 

  另外foreach不支持在循環中添加刪除操作,因為在使用foreach循環的時候數組(集合)就已經被鎖定不能被修改,否則會報出java.util.ConcurrentModificationException異常

  例如:

復制代碼
public static void main(String[] args) {
        List<String> arr = new ArrayList<String>();
        arr.add("你好");
        arr.add("我好");
        arr.add("大家好");
        
        //foreach循環
        for(String str : arr){                    
            System.out.println(str);            
            arr.add("1");                    //對arr進行添加    
        }
    }
復制代碼

  關於不能添加刪除原理以及如何在foreach中添加刪除我們下篇再說。

  所以總結如下:

  foreach適用於只是進行集合或數組遍歷,for則在較復雜的循環中效率更高。

  foreach不能對數組或集合進行修改(添加刪除操作),如果想要修改就要用for循環。

  所以相比較下來for循環更為靈活。

 


免責聲明!

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



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