Java使用迭代器Iterator遍歷集合

前言

上兩篇文章總結瞭集合體系以及Collection常用方法,本節我們來學習使用迭代器 Iterator 遍歷集合!

Iterator 概述

Iterator對象稱為迭代器(設計模式的一種),主要用於遍歷 Collection 集合中的元素。

GOF 給迭代器模式的定義為:提供一種方法訪問一個容器對象中各個元素,而又不需暴露該對象的內部細節。迭代器模式,就是為容器而生。

Collection 接口繼承瞭 java.lang.Iterable 接口,該接口有一個 iterator ()方法,那麼所有實現瞭 Collection 接口的集合類都有一個 iterator ()方法,用以返回一個實現瞭 Iterator 接口的對象。

Iterator 僅用於遍歷集合, lterator 本身並不提供承裝對象的能力。如果需要創建 Iterator 對象,則必須有一個被迭代的集合。

集合對象每次調用 iterator() 方法都得到一個全新的迭代器對象,默認遊標都在集合的第一個元素之前。

Iterator 的使用

使用 next() 方法遍歷集合

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/**
 * @Author:Aniu
 * @Date:2022/12/6 11:51
 * @description TODO
 */
public class Demo {
    public static void main(String[] args) {
        Collection coll = new ArrayList();
        coll.add("aniu");
        coll.add(123); //自動裝箱
        coll.add(new String("miao"));

        // 遍歷集合
        Iterator iterator1 = coll.iterator();
        // 方式一:利用 for 循環 -》不推薦
        for(int i=0;i<coll.size();i++){
            System.out.println(iterator1.next());
        }

        System.out.println("-----------");

        // 方式二 :利用 while 循環 -》推薦
        Iterator iterator2 = coll.iterator();
        while(iterator2.hasNext()){
            System.out.println(iterator2.next());
        }
    }
}

使用 remove 方法刪除元素

我們也可以使用迭代器中的 remove 方法刪除集合中的元素。

Collection coll = new ArrayList();
coll.add("aniu");
coll.add(123); //自動裝箱
coll.add(new String("miao"));
// 刪除"miao"
Iterator iterator = coll.iterator();
while(iterator.hasNext()){
    Object obj = iterator.next();
    if("miao".equals(obj)){
        iterator.remove(); // 刪除"miao"
    }
}

System.out.println(coll);

迭代器 Iterator 的執行原理

Iterator iterator = coll.iterator();
while(iterator.hasNext()){ //hasnext() 判斷是否還有下一個元素
    System.out.println(iterator.next()); //next 1.指針下移 2.將下移以後集合位置上的元素返回
}

使用foreach循環遍歷集合或數組

foreach循環又叫增強for循環,對於這個應該都很熟悉瞭吧,看下大概結構!

// for(datatype 變量名 : 遍歷對象)
for(Object obj:coll){
   System.out.println(obj);
}

內部還是調用瞭迭代器!

需要註意的是,使用增強for循環無法改變數組裡的值。

例:

String[] arr = new String[]{"aniu","haha","zz"};
for(int i=0;i<arr.length;i++){
    arr[i] = "momo";
}
for(int i=0;i<arr.length;i++){
    System.out.println(arr[i]);
}

System.out.println("----------");

String[] arr1 = new String[]{"aniu","haha","zz"};
for (String str:arr1){
    str = "momo";
}
for(int i=0;i<arr1.length;i++){
    System.out.println(arr1[i]);
}

可以看到增強for並沒修改數組的值,本質上是將遍歷值復制給瞭新變量String str,因此改變的是這個新變量的值!

到此這篇關於Java使用迭代器Iterator遍歷集合的文章就介紹到這瞭,更多相關Java迭代器Iterator遍歷集合內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: