欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Iterator迭代器與foreach循環(huán)代碼解析

 更新時間:2022年04月27日 09:56:10   作者:小老師ir  
這篇文章主要介紹了Java-Iterator迭代器與foreach循環(huán),主要包括Iterator迭代器接口的操作方法和foreach 循環(huán)語法解析,需要的朋友可以參考下

一、 Iterator迭代器接口

1. 使用 Iterator 接口遍歷集合元素

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

?GOF給迭代器模式的定義為:提供一種方法訪問一個容器(container)對象中各個元素,而又不需暴露該對象的內(nèi)部細節(jié)。迭代器模式,就是為容器而生。類似于“公交車上的售票員”、“火車上的乘務(wù)員”、“空姐”。

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

?Iterator 僅用于遍歷集合,Iterator 本身并不提供承裝對象的能力。如果需要創(chuàng)建 Iterator對象,則必須有一個被迭代的集合。

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

2. Iterator接口的方法

在這里插入圖片描述

注意:在調(diào)用it.next()方法之前必須要調(diào)用it.hasNext()進行檢測。若不調(diào)用,且下一條記錄無效,直接調(diào)用it.next()會拋出NoSuchElementException異常。

3. 迭代器的執(zhí)行原理

3.1 代碼演示

//hasNext():判斷是否還有下一個元素
while(iterator.hasNext()){
//next():①指針下移 ②將下移以后集合位置上的元素返回
System.out.println(iterator.next());
}

3.2 代碼執(zhí)行過程解析

當執(zhí)行Iterator iterator = coll.iterator();語句時,iterator的指針此時執(zhí)行下圖的①所標的位置,然后執(zhí)行iterator.hasNext()語句,此時會去判斷iterator的指針指向的位置的下一個位置(即②)有無元素,若有,則返回true,否則返回false。當返回結(jié)果為true時,則往下執(zhí)行 iterator.next()語句,此時iterator的指針下移并且把下移后的指針指向的集合位置上的元素返回。

在這里插入圖片描述

4. Iterator接口remove()方法

4.1 代碼演示

Iterator iter = coll.iterator();//回到起點
while(iter.hasNext()){
Object obj = iter.next();
if(obj.equals("Tom")){
iter.remove();
} }

4.2 注意

? Iterator可以刪除集合的元素,但是是遍歷過程中通過迭代器對象的remove方法,不是集合對象的remove方法。

? 如果還未調(diào)用next()或在上一次調(diào)用 next() 方法之后已經(jīng)調(diào)用了 remove 方法,再調(diào)用remove都會報IllegalStateException異常。

5. 代碼演示

 @Test
    public void test1(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new Person("Jerry",20));
        coll.add(new String("Tom"));
        coll.add(false);

        Iterator iterator = coll.iterator();
        //方式一:
//        System.out.println(iterator.next());
//        //報異常:NoSuchElementException
        //方式二:不推薦
//        for(int i = 0;i < coll.size();i++){
//            System.out.println(iterator.next());
//        }
        //方式三:推薦
        hasNext():判斷是否還有下一個元素
        while(iterator.hasNext()){
            //next():①指針下移 ②將下移以后集合位置上的元素返回
            System.out.println(iterator.next());
        }
    }
 @Test
    public void test2(){

        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new Person("Jerry",20));
        coll.add(new String("Tom"));
        coll.add(false);
        //錯誤方式一:
//        Iterator iterator = coll.iterator();
//        while((iterator.next()) != null){
//            System.out.println(iterator.next());
//        }
        //錯誤方式二:
        //集合對象每次調(diào)用iterator()方法都得到一個全新的迭代器對象,默認游標都在集合的第一個元素之前。
        while (coll.iterator().hasNext()){
            System.out.println(coll.iterator().next());
        }
    }
    //測試Iterator中的remove()
    //如果還未調(diào)用next()或在上一次調(diào)用 next 方法之后已經(jīng)調(diào)用了 remove 方法,
    // 再調(diào)用remove都會報IllegalStateException。
@Test
    public void test3(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new Person("Jerry",20));
        coll.add(new String("Tom"));
        coll.add(false);
        //刪除集合中"Tom"
        Iterator iterator = coll.iterator();
        while (iterator.hasNext()){
//            iterator.remove();
            Object obj = iterator.next();
            if("Tom".equals(obj)){
                iterator.remove();
//                iterator.remove();
            }
        }
        //遍歷集合
        iterator = coll.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

二、foreach 循環(huán)

1. 概述

? Java 5.0 提供了 foreach 循環(huán)迭代訪問 Collection和數(shù)組。

? 遍歷操作不需獲取Collection或數(shù)組的長度,無需使用索引訪問元素。

? 遍歷集合的底層調(diào)用Iterator完成操作。

? foreach還可以用來遍歷數(shù)組。

2. 語法解析

在這里插入圖片描述

3. 代碼演示

@Test
    public void test1(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new Person("Jerry",20));
        coll.add(new String("Tom"));
        coll.add(false);

        //for(集合元素的類型 局部變量 : 集合對象)
        //內(nèi)部仍然調(diào)用了迭代器。
        for(Object obj : coll){
            System.out.println(obj);
        }
        //123
        //456
        //Person@621be5d1
        //Tom
        //false
    }
 @Test
    public void test2(){
        int[] arr = new int[]{1,2,3,4,5,6};
        //for(數(shù)組元素的類型 局部變量 : 數(shù)組對象)
        for(int i : arr){
            System.out.println(i);
        }
        //1
        //2
        //3
        //4
        //5
        //6
    }

4. 易錯題

public class test {
    public static void main(String[] args) {
        String[] str = new String[5];
        for (String myStr : str) {
                myStr = "小老師ir";
                System.out.println(myStr);
        }
        //小老師ir
        //小老師ir
        //小老師ir
        //小老師ir
        //小老師ir
        for (int i = 0; i < str.length; i++) {
                System.out.println(str[i]);
        }
        //null
        //null
        //null
        //null
        //null
    }
}

到此這篇關(guān)于Java-Iterator迭代器與foreach循環(huán)的文章就介紹到這了,更多相關(guān)Java Iterator迭代器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java線程之用Thread類創(chuàng)建線程的方法

    java線程之用Thread類創(chuàng)建線程的方法

    本篇文章介紹了,Thread類創(chuàng)建線程的方法。需要的朋友參考下
    2013-05-05
  • java 實現(xiàn)圖片圓角處理、背景透明化

    java 實現(xiàn)圖片圓角處理、背景透明化

    這篇文章主要介紹了java 實現(xiàn)圖片圓角處理、背景透明化,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中字符串常見的一些拼接方式總結(jié)

    Java中字符串常見的一些拼接方式總結(jié)

    字符串拼接是我們在Java代碼中比較經(jīng)常要做的事情,就是把多個字符串拼接到一起,下面這篇文章主要給大家總結(jié)介紹了關(guān)于Java中字符串常見的一些拼接方式,需要的朋友可以參考下
    2023-04-04
  • Spark學(xué)習(xí)筆記之Spark中的RDD的具體使用

    Spark學(xué)習(xí)筆記之Spark中的RDD的具體使用

    這篇文章主要介紹了Spark學(xué)習(xí)筆記之Spark中的RDD的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Tomcat安裝配置及Eclipse配置詳解

    Tomcat安裝配置及Eclipse配置詳解

    給大家介紹一下Tomcat安裝配置及Eclipse配置的全部圖文過程,如果你對這個還有不明白,一起跟著小編學(xué)習(xí)下。
    2017-11-11
  • Java實現(xiàn)驗證碼具體代碼

    Java實現(xiàn)驗證碼具體代碼

    這篇文章主要介紹了Java實現(xiàn)驗證碼具體代碼,有需要的朋友可以參考一下
    2013-12-12
  • SpringBoot項目中Controller接收兩個實體的實現(xiàn)方法

    SpringBoot項目中Controller接收兩個實體的實現(xiàn)方法

    本文主要介紹了SpringBoot項目中Controller接收兩個實體的實現(xiàn)方法,主要介紹了兩種方法,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • Java特性?Lambda?表達式和函數(shù)式接口

    Java特性?Lambda?表達式和函數(shù)式接口

    這篇文章主要介紹了Java特性?Lambda?表達式和函數(shù)式接口,Lambda表達式基于函數(shù)式編程思想,也可以稱為閉包,是Java?8引入的重要新特性,?Lambda允許把函數(shù)作為一個方法的參數(shù)
    2022-06-06
  • spring中的FactoryBean代碼示例

    spring中的FactoryBean代碼示例

    這篇文章主要介紹了spring中的FactoryBean代碼示例,涉及FactoryBean的實現(xiàn)等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • java中實現(xiàn)map與對象相互轉(zhuǎn)換的幾種實現(xiàn)

    java中實現(xiàn)map與對象相互轉(zhuǎn)換的幾種實現(xiàn)

    這篇文章主要介紹了java中實現(xiàn)map與對象相互轉(zhuǎn)換的幾種實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論