1. 程式人生 > 其它 >4.Iterator迭代器

4.Iterator迭代器

技術標籤:3.集合java集合

目錄

4.Iterator迭代器

4.1.什麼是迭代

4.2.Iterator主要功能是什麼

4.3.Iterator介面中常用方法有哪些

4.4.迭代器的使用步驟

4.5.迭代器實現原理

4.6.增強for迴圈的產生和內部原理


4.Iterator迭代器


4.1.什麼是迭代

迭代:即Collection集合元素的通用獲取方式。在取元素之前先判斷集合中有沒有元素,如果有,就把元素取出來,然後繼續再判斷,如果還有就再取出,一直把集合中所有元素全部取出。這種取出方式專業術語稱為迭代。

4.2.Iterator主要功能是什麼

1.在程式開發中,經常需要遍歷集合中的所有元素。針對這種需求,jDK專門提供了一個

介面java.util.Iterator. Iterator介面也是java集合中的一員,但它與Collection、Map介面有所不同,Collection介面和map介面主要用於儲存元素,而Iterator主要用於迭代訪問(即遍歷)Collection集合元素,因此Iterator物件也被稱為迭代器。
2.簡單說,就是通用的取出集合中所有元素的一個介面,適用於任何集合。
3.Iterator迭代器:是一個介面,我們無法直接使用,需要使用Iterator介面的實現類物件

4.3.Iterator介面中常用方法有哪些

1.public E next():返回迭代的下一個元素(取出集合中的下一個元素)

2.public boolean hasNext():如果仍有元素可以迭代,則返回true 。

3.Iterator迭代器:是一個介面,我們無法直接使用,需要使用Iterator介面的實現類物件,獲取實現類的方式比較特殊,Collection介面中有一個方法叫iterator(),這個方法返回的就是迭代器的實現類物件。並使用Iterator介面接收(多型寫法)。
4.迭代器物件獲取方法Iterator<E>iterator():返回迭代器(物件).

4.4.迭代器的使用步驟

1.通過Collection集合中的方法iterator()獲取迭代器的實現類物件,並使用Iterator介面接收。
(介面指向實現類物件,這就是用多型建立一個介面物件的方式)
2.使用Iterator介面中的方法hasNext判斷還有沒有下一個元素。
3.使用Iterator介面中的方法next取出集合中的下一個元素。

public class IteratorDemo1 {
    public static void main(String[] args) {
        //建立一個(Collection)集合物件(用多型的方式:介面指向實現類物件)
        Collection<String>coll=new ArrayList<>();
        //往集合中新增元素
        coll.add("姚明");
        coll.add("科比");
        coll.add("麥迪");
        coll.add("詹姆斯");
        coll.add("艾弗森");
        //Collection集合沒有索引,不能遍歷,下面使用迭代器取出所有元素

        /**
         * 1.使用集合中的方法iterator()獲取迭代器的實現類物件,
         *   使用Iterator介面接收(多型)
         *   注意:Iterator<E>介面也是有泛型的,迭代器泛型與集合泛型是一致的。
         */
        Iterator<String> it=coll.iterator();  //介面指向其實現類的物件(多型)
        // 2.使用Iterator介面中的方法hasNext判斷還有沒有下一個元素
        while(it.hasNext()){
            // 3.使用Iterator介面中的方法next取出集合中的下一個元素
            String next = it.next();
            System.out.println(next);
        }
    }
}

4.5.迭代器實現原理

1.coll.iterator()獲取迭代器的實現類物件,並且把指標(索引)指向集合的-1索引。
2.it.hasNext()判斷集合還有沒有下一個元素
3.it.next()取出下一個元素,並把指標後移一位

當遍歷集合時,首先通過呼叫集合的iterator()方法獲得迭代器物件,然後使用hashNext()方法判斷集合中是否存在下一個元素,如果存在,則呼叫next()方法將元素取出,否則說明已到達了集合末尾,停止遍歷元素。Iterator迭代器物件在遍歷集合時,內部採用指標的方式來跟蹤集合中的元素,接下來通過一個圖例來演示Iterator物件迭代元素的過程。在呼叫Iterator的next方法之前,迭代器的索引位於第一個元素之前,不指向任何元素,當第一次呼叫迭代器的next方法後,迭代器的索引會向後移動一位,指向第一個元素並將該元素返回,當再次呼叫next方法時,迭代器的索引會指向第二個元素並將該元素返回,依此類推,直到hasNext方法返回false,表示到達了集合的末尾,終止對元素的遍歷

4.6.增強for迴圈的產生和內部原理

增強for迴圈(也稱for each迴圈),
1.增強for迴圈功能:是JDK1.5以後出來的高階for迴圈,專門用來遍歷陣列和集合。簡化(替代)迭代器來遍歷集合。
2.內部原理:(底層)其實是個Iterator迭代器,使用for迴圈的格式,簡化了迭代器的書寫。所以在遍歷過程中,不能對集合中的元素進行增刪改
2.格式:for(元素的資料型別 變數:Collection集合or陣列){...... }
3.public interface Iterable<T>實現這個介面,允許物件成為foreach語句的目標。
4.Collection<E>extends Iterable<E>:由於Collection集合繼承了Iterable介面,所以,所有集合都可以作為foreach語句的目標,對集合進行遍歷。
5.增強for迴圈快捷鍵:集合或陣列名.for+enter
6.注意事項:新for迴圈必須有被遍歷的目標,目標只能是Collection(集合)或陣列。新for迴圈僅僅作為遍歷操作出現
7.總之,增強for迴圈專門用來遍歷陣列和集合,

public class foreach {
    public static void main(String[] args) {
        demo01();
        demo02();
    }
    //增強for迴圈遍歷陣列
    private static void demo01(){
        int[] arr={1,2,3,4,5};
        for (int i : arr) {
            System.out.println(i);
        }
    }
    //增強for迴圈遍歷集合
    private static void demo02(){
        ArrayList<String> list=new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");
        for (String s : list) {
            System.out.println(s);
        }
    }
}