迭代器和增強型for循環


★迭代器:

 Java集合框架的集合類,我們有時候稱之為容器。容器的種類有很多種,比如ArrayList、LinkedList、HashSet...,每種容器都有自己的特點,ArrayList底層維護的是一個數組;LinkedList是鏈表結構的;HashSet依賴的是哈希表,每種容器都有自己特有的數據結構。

  因為容器的內部結構不同,很多時候可能不知道該怎樣去遍歷一個容器中的元素。所以為了使對容器內元素的操作更為簡單,Java引入了迭代器模式! 

  把訪問邏輯從不同類型的集合類中抽取出來,從而避免向外部暴露集合的內部結構。

public class CollectionDemo1 {
    public static void main(String[] args) {
        //集合中可以存任意類型
        Collection co = new ArrayList<>();
        co.add("a");
        co.add("sfadjkjksd");
        //迭代器   獲取迭代器
        Iterator it = co.iterator();
        
        while(it.hasNext()){//判斷是否存在下個元素
            String s = (String)it.next();//獲取下個元素
            //System.out.println(s);
            System.out.println(s.length());
        }
    }
}

★增強型for循環:

  1.增強型for循環使用起來比較方便,代碼也比較簡單,如果只是操作集合中元素的而不使用索引的話,建議用此方法。
對於普通for循環,如果需要使用索引進行其它操作的話,建議用這個。

  2,特點:
    書寫簡潔:
  對集合進行遍歷,只能獲取集合元素,不能對集合進行操作,類似迭代器的簡寫形式,但是迭代器可以對元素進行remove操作(ListIterator可以進行增刪改查的操作)。

  3,格式:
    for(數據類型變量名 :被遍歷的集合(collection)或者數組) {
        執行語句
    }

public class ForEach {
    public static void main(String[] args) {
        fun();
    }
    //for循環的弊端    有下標
    //增強for循環優點     代碼少了   沒有索引
    public static void fun(){
        int[] arr={12,5,689,45,23,69,87};
//        for (int i = 0; i < arr.length; i++) {
//            System.out.println(arr[i]);
//        }
        for(int i: arr){
            System.out.println(i+1);//沒有下標,不能對元素進行單個操作,整體加一
        }
        System.out.println(arr[0]);
    }
}

 ★迭代器和增強型for循環的並發異常:

/* 迭代器的並發異常   java.util.ConcurrentModificationException
 * 增強for循環     java.util.ConcurrentModificationException
* 在遍歷或者迭代過程中對集合進行增刪 都會發生異常
* */

public class ListDemo {
    public static void main(String[] args) {
        List<String> s=new ArrayList<String>();
        s.add("欲問青天這人生有幾何");
        s.add("這人生有幾何");
        s.add("怕這去日苦多");
//判斷集合中是否有"這人生有幾何",假如有,那么把"愛的故事上集"添加到集合中.
/*//增強型for循環
        for(String i:s){
            if (i.equals("這人生有幾何")) {
                s.add("愛的故事上集");
            }
        }
        */
        /*迭代器
        Iterator<String> it=s.iterator();
        while (it.hasNext()) {
            String s1 = (String) it.next();
            if (s1.equals("這人生有幾何")) {
                s.add("愛的故事上集");
            System.out.println(s1);
        }
        } */
//判斷集合中是否有"這人生有幾何",假如有,那么把"愛的故事上集"添加到集合中.
        for (int i = 0; i < s.size(); i++) {
            //System.out.println(s.get(i));
                if((s.get(i)).equals("這人生有幾何")){
                    s.add("愛的故事上集");
                }
        }
        for (int i = 0; i < s.size(); i++) {
            System.out.println(s.get(i));
        }
  }
}

 


免責聲明!

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



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