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

Java Iterator接口遍歷單列集合迭代器原理詳解

 更新時(shí)間:2019年12月18日 10:25:34   作者:我的腳印  
這篇文章主要介紹了Java Iterator接口遍歷單列集合迭代器原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Java Iterator接口遍歷單列集合迭代器原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Iterator接口概述

在程序開發(fā)中,經(jīng)常需要遍歷集合中的所有元素。針對(duì)這種需求,JDK專門提供了一個(gè)接口java.util.Iterator 。 Iterator 接口也是Java集合中的一員,但它與 Collection 、 Map 接口有所不同,Collection 接口與 Map 接口主要用于存儲(chǔ)元素,而 Iterator 主要用于迭代訪問(即遍歷) Collection 中的元素,因此 Iterator 對(duì)象也被稱為迭代器。

迭代的概念

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

獲取迭代器

Iterator迭代器,是一個(gè)接口,我們無法直接使用,需要使用Iterator接口的實(shí)現(xiàn)類對(duì)象,獲取實(shí)現(xiàn)類的方式比較特殊Collection接口中有一個(gè)方法,叫iterator(),這個(gè)方法返回的就是迭代器的實(shí)現(xiàn)類對(duì)象Iterator<E> iterator() 返回在此 collection 的元素上進(jìn)行迭代的迭代器。

public Iterator iterator() : 獲取集合對(duì)應(yīng)的迭代器,用來遍歷集合中的元素的。

Iterator接口的常用方法如下:

public E next() :返回迭代的下一個(gè)元素

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

迭代器的使用步驟

  • 使用集合中的方法iterator()獲取迭代器的實(shí)現(xiàn)類對(duì)象,使用Iterator接口接收(多態(tài))
  • 使用Iterator接口中的方法hasNext判斷還有沒有下一個(gè)元素
  • 使用Iterator接口中的方法next取出集合中的下一個(gè)元素

代碼舉例

package demo02;

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

public class Demo01Iterator {
  public static void main(String[] args) {
    //創(chuàng)建一個(gè)集合對(duì)象
    Collection<Integer> coll = new ArrayList<>();
    //往集合中添加元素 自動(dòng)裝箱
    coll.add(1);
    coll.add(2);
    coll.add(3);
    coll.add(4);
    /*
      1.使用集合中的方法iterator()獲取迭代器的實(shí)現(xiàn)類對(duì)象,使用Iterator接口接收(多態(tài))
      注意:
        Iterator<E>接口也是有泛型的,迭代器的泛型跟著集合走,集合是什么泛型,迭代器就是什么泛型
     */
    //多態(tài) 接口      實(shí)現(xiàn)類對(duì)象
    Iterator<Integer> it = coll.iterator();
    //2.使用Iterator接口中的方法hasNext判斷還有沒有下一個(gè)元素
    while (it.hasNext()) {
      //3.使用Iterator接口中的方法next取出集合中的下一個(gè)元素
      System.out.println(it.next());
    }
  }
}

代碼執(zhí)行后的結(jié)果

tips:在進(jìn)行集合元素取出時(shí),如果集合中已經(jīng)沒有元素了,還繼續(xù)使用迭代器的next方法,將會(huì)發(fā)生java.util.NoSuchElementException沒有集合元素的錯(cuò)誤。

迭代器的實(shí)現(xiàn)原理

當(dāng)遍歷集合時(shí),首先通過調(diào)用Collection集合的iterator()方法獲得迭代器對(duì)象,然后使用hashNext()方法判斷集合中是否存在下一個(gè)元素,如果存在,則調(diào)用next()方法將元素取出,否則說明已到達(dá)了集合末尾,停止遍歷元素。Iterator迭代器對(duì)象在遍歷集合時(shí),內(nèi)部采用指針的方式來跟蹤集合中的元素,為了讓初學(xué)者能更好地理解迭代器的工作原理,接下來通過一個(gè)圖例來演示Iterator對(duì)象迭代元素的過程:

在調(diào)用Iterator的next方法之前,迭代器的索引位于第一個(gè)元素之前,不指向任何元素,當(dāng)?shù)谝淮握{(diào)用迭代器的next方法后,迭代器的索引會(huì)向后移動(dòng)一位,指向第一個(gè)元素并將該元素返回,當(dāng)再次調(diào)用next方法時(shí),迭代器的索引會(huì)指向第二個(gè)元素并將該元素返回,依此類推,直到hasNext方法返回false,表示到達(dá)了集合的末尾,終止對(duì)元素的遍歷。

增強(qiáng)for

增強(qiáng)for循環(huán)(也稱for each循環(huán))是JDK1.5以后出來的一個(gè)高級(jí)for循環(huán),專門用來遍歷數(shù)組和集合的。它的內(nèi)部原理其實(shí)是個(gè)Iterator迭代器,所以在遍歷的過程中,不能對(duì)集合中的元素進(jìn)行增刪操作。 為什么集合和數(shù)組都可以使用增強(qiáng)for循環(huán)進(jìn)行遍歷?因?yàn)閷?shí)現(xiàn)了只要實(shí)現(xiàn)了Iterable<T>接口就允許對(duì)象成為 "foreach" 語句的目標(biāo)。而Collection<E>extends Iterable<E>這個(gè)接口,所以所有的單列集合都可以使用增強(qiáng)for。

作用:

它用于遍歷Collection和數(shù)組。通常只進(jìn)行遍歷元素,不要在遍歷的過程中對(duì)集合元素進(jìn)行增刪操作。

格式:

代碼舉例

遍歷數(shù)組

package demo02Iterator;

public class ForArray {
  public static void main(String[] args) {
    int[] arr = {3, 5, 6, 87};
    //使用增強(qiáng)for遍歷數(shù)組
    for (int a : arr) {//a代表數(shù)組中的每個(gè)元素
      System.out.print(a + " ");//3 5 6 87
    }
  }
}

遍歷集合

package demo02Iterator;

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

public class ForArrayList {

  public static void main(String[] args) {
    //遍歷集合
    Collection<String> coll = new ArrayList<String>();
    coll.add("小河神");
    coll.add("老河神");
    coll.add("神婆");
    //使用增強(qiáng)for遍歷
    for (String s : coll) {
      //接收變量s代表 代表被遍歷到的集合元
      System.out.print(s + " ");//小河神 老河神 神婆 
    }
  }
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java關(guān)于MyBatis緩存詳解

    Java關(guān)于MyBatis緩存詳解

    緩存的重要性是不言而喻的,使用緩存,我們可以避免頻繁的與數(shù)據(jù)庫進(jìn)行交互,尤其是在查詢?cè)蕉?、緩存命中率越高的情況下,使用緩存對(duì)性能的提高更明顯。本文將給大家詳細(xì)的介紹,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值
    2021-09-09
  • springcloud使用Hystrix進(jìn)行微服務(wù)降級(jí)管理

    springcloud使用Hystrix進(jìn)行微服務(wù)降級(jí)管理

    這篇文章主要介紹了springcloud使用Hystrix進(jìn)行微服務(wù)降級(jí)管理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Spring Boot面試題總結(jié)

    Spring Boot面試題總結(jié)

    這篇文章主要介紹了Spring Boot面試題總結(jié),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • java的反射用不好試試內(nèi)省?

    java的反射用不好試試內(nèi)省?

    使用內(nèi)省相對(duì)于直接使用反射更加安全可靠,Java的反射機(jī)制比較特殊,它不同于一般的編程方式,稍不小心就容易破壞類的封裝性。練的不好,就容易走火入魔。沒關(guān)系,很多時(shí)候我們還可以使用Java的內(nèi)省機(jī)制哦
    2021-07-07
  • SpringBoot3.x集成nacos并實(shí)現(xiàn)多環(huán)境配置的操作步驟

    SpringBoot3.x集成nacos并實(shí)現(xiàn)多環(huán)境配置的操作步驟

    本文詳細(xì)介紹了如何在Springboot3.x中集成Nacos2.x版本,包括nacos的安裝、配置更改,以及在集成過程中遇到的問題,如端口設(shè)置、依賴版本調(diào)整等,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • java之lombok的構(gòu)建者模式Builder中的泛型寫法說明

    java之lombok的構(gòu)建者模式Builder中的泛型寫法說明

    這篇文章主要介紹了java之lombok的構(gòu)建者模式Builder中的泛型寫法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • springboot使用之多個(gè)filter的執(zhí)行順序以及配置方式

    springboot使用之多個(gè)filter的執(zhí)行順序以及配置方式

    這篇文章主要介紹了springboot使用之多個(gè)filter的執(zhí)行順序以及配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java中類加載與雙親委派機(jī)制詳解

    java中類加載與雙親委派機(jī)制詳解

    這篇文章主要介紹了java中類加載與雙親委派機(jī)制詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Java初學(xué)之繼承與多態(tài)

    Java初學(xué)之繼承與多態(tài)

    這篇文章主要介紹了Java 繼承與多態(tài)的深入理解的相關(guān)資料,子類繼承父類的特征和行為,使得子類具有父類的各種屬性和方法?;蜃宇悘母割惱^承方法,使得子類具有父類相同的行為,需要的朋友可以參考下
    2021-07-07
  • Java中Map集合的常用方法詳解

    Java中Map集合的常用方法詳解

    本篇文章給大家?guī)淼膬?nèi)容是關(guān)于Java中Map集合的常用方法詳解,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。下面我們就來學(xué)習(xí)一下吧
    2021-11-11

最新評(píng)論