Java基礎 第三節 第七課

我是小白呀發表於2020-11-28

Iterator 介面

在程式開發中, 經常需要遍歷集合中的所有元素. 針對這種需求, JDK 專門提供了一個介面java.util.Iterator.

概述

Iterator 介面也是 Java 集合中的一員. 但它與 Collection, Map 介面有所不同. Collection 介面與 Map 介面主要用於儲存元素, 而 Iterator 主要用於迭代訪問 (即遍歷) Collection 中的元素. 因此 Iterator 物件也被稱為迭代器.

想要遍歷 Collection 集合, 那麼就要獲取該集合迭代器完成迭代操作. 下面介紹一下獲取攜帶器的方法.

publicIterator iterator():

獲取集合物件的迭代器, 用來遍歷集合中的元素,

迭代的概念

迭代: 即 Collection 集合元素的通用獲取方式.

在取元素之前先要判斷集合中有沒有元素. 如果有, 就把這個元素取出來, 再繼續判斷, 如果還有就再取出來. 一直把集合中的所有元素全部取出. 這種取出方式專業術語稱為迭代.

常用方法

Iterator 介面的常用方法如下:

  • publicE next(): 返回迭代的下一個元素
  • publicboolean hasNext(): 如果仍有元素可以迭代, 則返回 true

程式碼展示

import java.util.Collection;
import java.util.Iterator;

public class Test {
    public static void main(String[] args) {
        // 使用多型建立物件
        Collection<String> collection = new ArrayList<>();
        
        // 新增元素到集合
        collection.add("littlewhite");
        collection.add("middlewhite");
        collection.add("bigwhite");
        
        // 使用迭代器變數
        // 獲得迭代器物件
        Iterator<String> iterator = collection.iterator();
        
        while (iterator.hasNext()){  // 判斷是否有迭代元素
            String temp = iterator.next();  // 獲取迭代出的元素
            System.out.println(temp);
        }
    }
}

輸出結果:
littlewhite
middlewhite
bigwhite

迭代器的實現原理

當遍歷集合時:

  1. 首先通過呼叫集合的 Iterator() 方法獲得迭代器物件
  2. 然後使用 hashNext() 方法判斷集合中是否存在下一個元素
  3. 如果存在, 則呼叫 next() 方法將元素取出. 否則說明已到達了集合末尾, 停止遍歷元素.

Iterator 迭代器物件在遍歷集合時, 內部採用指標的方法來跟蹤集合中的元素:

  1. 在使用 Iterator 的 next 方法之前, 迭代器的索引位於第一個元素之前, 不指向任何元素
  2. 當第一次呼叫迭代器的 next 方法後, 迭代器的索引會向後移動一位, 指向第一個元素並將該元素返回
  3. 當再次呼叫 next 方法時, 迭代器的索引會指向第二個元素並將該元素返回
  4. 以此類推, 直到 hasNext 方法返回 flase, 表示到達了集合的末尾, 終止對元素的遍歷
    在這裡插入圖片描述

增強 for

增強 for 迴圈 (也稱 for each 迴圈) 是 JDK1.5 以後出來的一個高階 for 迴圈, 專門用來遍歷陣列和集合的.

它的內部原理其實是個 Iterator 迭代器. 所以在遍歷的過程中, 不能對集合中的元素進行增刪操作.

格式:

for(元素的資料型別 變數 : Collection 集合 or 陣列){
    //寫操作程式碼
}

增強迴圈用於遍歷 Collection 和陣列. 通常只進行遍歷元素, 不要在遍歷的過程中對集合元素進行增刪操作.

練習

練習 1: 遍歷陣列

public class Test {
    public static void main(String[] args) {
        int[] array = {1,2,3};
        // 使用增強for遍歷陣列
        for(int temp : array){  
            // temp 代表陣列中的每個元素
            System.out.println(temp);            
        }
    }
}

輸出結果:
1
2
3

練習 2: 遍歷集合

import java.util.ArrayList;
import java.util.Collection;

public class Test27 {
    public static void main(String[] args) {
        Collection<String> collection = new ArrayList<>();
        collection.add("littlewhite");
        collection.add("middlewhite");
        collection.add("bigwhite");

        // 使用增強for遍歷
        for(String temp : collection){
            System.out.println(temp);
        }
    }
}

輸出結果:
littlewhite
middlewhite
bigwhite

注: 新 for 迴圈必須有被遍歷的目標. 目標只能是 Collection 或者是陣列. 新式 for 僅僅作為遍歷操作出現.

相關文章