Iterater迭代器和增強for循環

1、Collection接口遍歷元素—Iterator迭代器

看一下下面這張圖片:可以看出Collection接口有一個父接口Iterable,Iterable接口有一個iterator()方法,iterator()方法的類型是Iterator迭代器,實際上當我們使用方法時,返回的是一個Iterator對象,目的是實現元素的遍歷。

Iterator接口介紹

集合的迭代操作就是將集合中的元素逐個地遍歷取出來。?

  • iterator對象稱為迭代器,主要用于遍歷Collection集合中的元素。

  • 所有實現了Collection接口集合類都有一個iterator()方法,用以返回一個實現了iterator接口的對象,既可以返回一個迭代器。

  • Iterator僅用于遍歷集合,Iterator本身并不存放對象。

Iterator接口的方法

Iterator接口的方法有hasNext()、next()、remove()。

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

迭代器的執行原理

Iterator iterator= coll.iterator();//得到一個集合的迭代器

//hasNext():判斷是否還有下一個元素

while(iterator.hasNext()){

//next()作用:1、下移。2、將下移以后集合位置上的元素返回

System.out.println(iterator.next());

}

原理實現


import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class IteratorUse {@SuppressWarnings({"all"})public static void main(String[] args) {//由于接口不能直接被實例化,只有實現了接口的類才能被實例化,所以這里我們使用ArrayList//使用collection接口接收Collection collection = new ArrayList();//(1)普通輸出collection.add(new Book("三國演義","羅貫中",100.4));collection.add(new Book("紅樓夢","曹雪芹",87));collection.add(new Book("水滸傳","施耐庵",80.4));//System.out.println(collection);//[B00k{name='三國演義', author='羅貫中', price=100.4},// B00k{name='紅樓夢', author='曹雪芹', price=87.0},// B00k{name='水滸傳', author='施耐庵', price=80.4}]//(2)使用迭代器Iterator iterator = collection.iterator();//先得到collection對應的迭代器,使用while遍歷while(iterator.hasNext()){//返回下一個元素,類型是ObjectObject obj = iterator.next();System.out.println(obj);//B00k{name='三國演義', author='羅貫中', price=100.4}//B00k{name='紅樓夢', author='曹雪芹', price=87.0}//B00k{name='水滸傳', author='施耐庵', price=80.4}}}
}
class Book{private String name;private String author;private double price;public Book(String name, String author, double price) {this.name = name;this.author = author;this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "B00k{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +'}';}
}

2、Collection接口遍歷對象—for循環增強

增強for循環介紹

增強for循環,可以代替iterator迭代器。

特點:增強for就是簡化版的iterator,本質一樣。只能用于遍歷集合或數組

基本語法:

for(元素類型 元素名? 集合名或數組名){?

? ? 訪問元素;

}

案例演示:

集合中使用增強for循環:

package com.lwtstu6.practice3;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class IteratorUse {@SuppressWarnings({"all"})public static void main(String[] args) {//由于接口不能直接被實例化,只有實現了接口的類才能被實例化,所以這里我們使用ArrayList//使用collection接口接收Collection collection = new ArrayList();//(1)普通輸出collection.add(new Book("三國演義","羅貫中",100.4));collection.add(new Book("紅樓夢","曹雪芹",87));collection.add(new Book("水滸傳","施耐庵",80.4));//System.out.println(collection);//[B00k{name='三國演義', author='羅貫中', price=100.4},// B00k{name='紅樓夢', author='曹雪芹', price=87.0},// B00k{name='水滸傳', author='施耐庵', price=80.4}]//(2)使用增強for循環for(Object obj:collection){//把collection中的對象依次取出,并賦給obj,然后再輸出objSystem.out.println(obj);}//B00k{name='三國演義', author='羅貫中', price=100.4}//B00k{name='紅樓夢', author='曹雪芹', price=87.0}//B00k{name='水滸傳', author='施耐庵', price=80.4}}
}
class Book{private String name;private String author;private double price;public Book(String name, String author, double price) {this.name = name;this.author = author;this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "B00k{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +'}';}
}

直接在數組中使用增強for循環:

int[] nums = {1,8,19,76};

for(int i:num){

? ? ? ? System.out.println("i="+i);??

}

//輸出結果:

//1

//8

//19

//76

3、迭代器和增強for練習題

創建三個Dog{name,age}對象,放入到ArrayList中,賦給List引用,用迭代器和增強for循環兩種方式來遍歷,重寫Dog的toString 方法,輸出name和age.

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;class Dog{private String name;private int age;public Dog(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", age=" + age +'}';}
}public class CollectionExercise {public static void main(String[] args) {//由于接口不能直接被實例化,只有實現了接口的類才能被實例化。//這里使用list來接收,是因為ArrayList的實現類也有List接口。//創建流浪貓集合List list = new ArrayList();//創建流浪貓對象Dog dog1 = new Dog("小花",3);Dog dog2 = new Dog("小白",4);Dog dog3 = new Dog("小黑",7);//把流浪貓放到集合中list.add(dog1);list.add(dog2);list.add(dog3);//方式一使用迭代器遍歷數組輸出數據Iterator iterator = list.iterator();//獲取Iterator對象while(iterator.hasNext()){//判斷集合中是否存在下一個元素Dog ele = (Dog)iterator.next();//輸出集合中的元素System.out.println(ele);}System.out.println("--------------------");//方式二使用foreachfor (Object o :list) {System.out.println(o);}}
}


? ? ?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15162.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15162.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15162.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Go語言的pprof工具是如何使用的?

文章目錄 Go語言的pprof工具詳解pprof的使用runtime/pprofnet/http/pprof 快速開始獲取采樣數據通過pprof工具進行性能分析總結 Go語言的pprof工具詳解 Go語言作為一個高性能、高并發的編程語言,對性能優化有著極高的要求。在Go語言的標準庫中,pprof是一…

linux 安全 iptables防火墻 (一)

Linux包過濾防火墻概述 Linux 系統的防火墻 :IP信息包過濾系統,它實際上由兩個組件netfilter 和 iptables組成。 主要工作在網絡層,針對IP數據包。體現在對包內的IP地址、端口、協議等信息的處理上。 兩大組件 netfilter內核組件 iptables應…

blender安裝cats-blender-plugin-0-19-0插件,導入pmx三維模型

UE5系列文章目錄 文章目錄 UE5系列文章目錄前言一、Blender安裝二、cats-blender-plugin-0-19-0插件下載三、下載bmp文件四、在blender2.93中安裝cats-blender-plugin-0-19-0插件 前言 blender本身不支持pmx三維模型,需要用到cats-blender-plugin-0-19-0插件。 一…

構建全面的無障礙學習環境:科技之光,照亮學習之旅

在信息與科技日益發展的當下,為所有人群提供一個包容和平等的學習環境顯得尤為重要,特別是對于盲人朋友而言,無障礙學習環境的構建成為了一項亟待關注與深化的課題。一款名為“蝙蝠避障”的輔助軟件,以其創新的設計理念與實用功能…

Offline RL : Context-Former: Stitching via Latent Conditioned Sequence Modeling

paper 基于HIM的離線RL算法,解決基于序列模型的離線強化學習算法缺乏對序列拼接能力。 Intro 文章提出了ContextFormer,旨在解決決策變換器(Decision Transformer, DT)在軌跡拼接(stitching)能力上的不足…

新定義單片機的說明

新定義的官網是https://www.rdsmcu.com/shop/#/,主要經營的是1T系列的51單片機,之前從他們官網上申請了評估板,自己頁玩了一段時間,不過玩的不多,特開此專欄記錄學習過程,并幫助剛入門的道友快速上手。 我申請的是評估…

DQL(數據查詢)

目錄 1. DQL概念 2. DQL - 編寫順序 3. 基礎查詢 3.1 查詢多個字段 3.2 字段設置別名 3.3 去除重復記錄 3.4 案例 4. 條件查詢 4.1 語法 4.2 條件 4.3 案例: 5. 聚合函數 5.1 常見的聚合函數: 5.2 語法 5.3 案例: 6. 分組查…

VScode SSH連接遠程服務器報錯

一、報錯 通過VScode SSH插件遠程連接服務器,輸入密碼后沒有連接成功,一直跳出輸入密碼界面,在輸出界面里,一直是Waiting for server log或者是顯示Cannot not find minimist 二、處理 🐱: 這個時候應該…

力扣每日一題 5/25

題目: 給你一個下標從 0 開始、長度為 n 的整數數組 nums ,以及整數 indexDifference 和整數 valueDifference 。 你的任務是從范圍 [0, n - 1] 內找出 2 個滿足下述所有條件的下標 i 和 j : abs(i - j) > indexDifference 且abs(nums…

CTF網絡安全大賽web題目:字符?正則?

題目來源于&#xff1a;bugku 題目難度&#xff1a;難 題目描  述: 字符&#xff1f;正則&#xff1f; 題目htmnl源代碼&#xff1a; <code><span style"color: #000000"> <span style"color: #0000BB"><?php <br />highl…

C-數據結構-鏈式存儲棧(二次封裝)

/* 二次封裝 借用已經實現雙向鏈表結構來實現 棧 出棧入棧操作類似于 從頭節點開始的插入和刪除 */ llist.h #ifndef LLIST_H__ #define LLSIT_H__ #define LLIST_FORWARD 1 #definr LLIST_BACKWARD 2 typedef void llist_op(const void *);//回調函數 typedef int llist_cmp…

分組排序取最大sql理解

分組排序取最大sql理解 --用戶過濾&#xff08;只能看到當前用戶對應部門用戶權限表中的部門&#xff09; select h.pk_tbdept from jygyl_bmyhqxb h left join jygyl_bmyhqxb_b b on h.pk_bmyhqx b.pk_bmyhqx where isnull(h.dr,0) 0 and isnull(b.dr,0) 0 and b.pk…

類圖的六大關系

類圖中的六大關系包括&#xff1a;繼承關系、實現關系、關聯關系、聚合關系、組合關系和依賴關系。 1. 繼承關系 繼承是一種類與類之間的關系&#xff0c;表示一種泛化和特化的關系。子類繼承父類的特性和行為。 class Animal {void eat() {System.out.println("This an…

TensorFlow.js

什么是 TensorFlow.js&#xff1f; TensorFlow.js 是一個基于 JavaScript 的機器學習庫&#xff0c;它是 Google 開發的 TensorFlow 的 JavaScript 版本。它使得開發者能夠在瀏覽器中直接運行機器學習模型&#xff0c;而不需要依賴于后端服務器或云服務。TensorFlow.js 的主要…

【JavaEE 初階(十)】JVM

?博主主頁: 33的博客? ??文章專欄分類:JavaEE?? &#x1f69a;我的代碼倉庫: 33的代碼倉庫&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;關注我帶你了解更多進階知識 目錄 1.前言2.JVM內存區域劃分3.類加載3.1雙親委派模型 4.垃圾回收&#xff08;GC&#xff0…

【智能優化算法】粒子群優化算法(PSO)【附python實現代碼】

寫在前面&#xff1a; 首先感謝兄弟們的訂閱&#xff0c;讓我有創作的動力&#xff0c;在創作過程我會盡最大能力&#xff0c;保證作品的質量&#xff0c;如果有問題&#xff0c;可以私信我&#xff0c;讓我們攜手共進&#xff0c;共創輝煌。 路雖遠&#xff0c;行則將至&#…

【軟件設計師】下午題總結-數據流圖、數據庫、統一建模語言

下午題總結 1 試題一1.1 結構化語言 2 試題二弱實體增加權限增加實體間聯系和聯系的類型 3 試題三3.1 UML關系例子 3.2 例子&#xff08;2016上半年&#xff09;3.3 設計類分類3.3.1 接口類3.3.2 控制類3.3.3 實體類 3.4 簡答題3.4.1 簡要說明選擇候選類的原則3.4.2 某個類必須…

Kafka SSL認證

證書生成 在kafka安裝目錄下/certificates生成keystore和trust文件&#xff0c;在其中一臺機器聲生成證書&#xff0c;然后將 生成的server.keystore.jks和server.truststore.jks文件拷貝其他broker節點上去即可 1.生成keystore [rootm1 certificates]# keytool -keystore se…

Mantine UI:簡潔、靈活的 React UI 庫

介紹 Mantine UI Mantine UI 是一個由 React 驅動的現代 UI 庫&#xff0c;旨在簡化開發人員構建用戶界面的過程。它提供了一系列經過優化和可訪問的組件&#xff0c;適用于各種項目&#xff0c;從簡單的網站到復雜的應用程序。Mantine UI 的特點包括&#xff1a; 可定制性&a…

Android-okhttp調接口傳參簡單舉例

步驟1&#xff1a;在主線程中創建thread調接口 new Thread(new Runnable() {Overridepublic void run() {getServiceList();}}).start();步驟2&#xff1a;okhttp調接口 private void getServiceList(){Message msg new Message();try{OkHttpClient okHttpClient new OkHttp…