零基礎學Java第二十二天之迭代器 Iterator

迭代器 Iterator 的理解和相關集合 使用

1、理解

迭代器(Iterator)是設計模式中的一種,它允許程序員遍歷容器(例如列表、集合等)中的元素,而無需了解容器底層的實現細節。在編程中,迭代器提供了一種方法來訪問一個聚合對象中的各個元素,而又不暴露該對象的內部表示。

2、特點

  1. 順序訪問:迭代器通常按照某種順序(如插入順序或排序順序)訪問容器中的元素。
  2. 一次訪問一個元素:迭代器在給定時刻只指向容器中的一個元素。
  3. 狀態保存:迭代器保存了遍歷容器時的狀態,使得在迭代過程中可以記住當前的位置。
  4. 不修改容器:迭代器通常不修改容器本身,只用于訪問元素。

3、使用

1、foreach迭代器(增強for循環)

package com.xx.iterator01;import java.util.ArrayList;public class Test01 {/***深入迭代器 -- foreach*/public static void main(String[] args) {// 創建一個ArrayList集合并添加一些元素ArrayList<String> list = new ArrayList<>();//往集合里面添加元素list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");list.add("eee");//foreach循環// 它聲明了一個變量element(類型為String),該變量將在每次迭代中存儲list中的下一個元素。list是外部定義的,并假定為包含String元素的某種集合(最常見的是List<String>)。for (String element : list) {System.out.println(element);}/*** 使用foreach循環遍歷集合的底層實現:Iterator<String> it = list.iterator(); // 獲取迭代器  String element;  //當他有下一個元素時while (it.hasNext()) { // 使用while循環模擬for-each循環  element = it.next(); // 獲取下一個元素  System.out.println(element); // 打印元素  }*/}
}

2、Iterator遍歷元素

package com.xx.iterator01;import java.util.ArrayList;
import java.util.Iterator;public class Test02 {/*** 深入迭代器 -- Iterator* * 深入:Iterator如何遍歷元素*/public static void main(String[] args) {// 創建一個ArrayList集合并添加一些元素ArrayList<String> list = new ArrayList<>();//添加元素list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");list.add("eee");//移除元素list.remove("bbb");//獲取迭代器Iterator<String> it = list.iterator();//當有下一個元素時,繼續循環打印while(it.hasNext()){String element = it.next();System.out.println(element);}}
}

3、使用Iterator遍歷元素,遍歷到"bbb"時刪除該元素

package com.xx.iterator01;import java.util.ArrayList;
import java.util.Iterator;public class Test02 {/*** 知識點:深入迭代器 -- Iterator* * 深入:Iterator如何遍歷元素*/public static void main(String[] args) {// 創建一個ArrayList集合并添加一些元素ArrayList<String> list = new ArrayList<>();//添加元素list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");list.add("eee");//移除元素list.remove("bbb");//獲取迭代器Iterator<String> it = list.iterator();//當有下一個元素時,繼續循環打印while(it.hasNext()){ String element = it.next();//如果元素等于bbb,則刪除if(element.equals("bbb")){//list.remove(element);/it.remove();}//開始遍歷for (String element : list) {System.out.println(element);}}}
}

4、使用ListIterator遍歷元素

package com.xx.iterator01;import java.util.ArrayList;
import java.util.ListIterator;public class Test04 {/*** 深入迭代器 -- ListIterator* * 需求:使用ListIterator遍歷元素*/public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");list.add("eee");ListIterator<String> listIterator = list.listIterator();while(listIterator.hasNext()){String element = listIterator.next();System.out.println(element);}}
}

5、使用ListIterator遍歷元素,遍歷到"bbb"時刪除

package com.xx.iterator01;import java.util.ArrayList;
import java.util.ListIterator;public class Test05 {/*** 深入迭代器 -- ListIterator* * 需求:使用ListIterator遍歷元素,遍歷到"bbb"時刪除*/public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");list.add("eee");ListIterator<String> listIterator = list.listIterator();//當下一個位置有元素時,繼續循環while(listIterator.hasNext()){//將下一個位置的元素,賦值給elelmentString element = listIterator.next();//如果元素輸入為bbb,刪除bbbif(element.equals("bbb")){listIterator.remove();}}//開始遍歷集合for (String element : list) {System.out.println(element);}}
}

6、使用ListIterator遍歷元素,遍歷到"bbb"時添加"xyz"

package com.xx.iterator01;import java.util.ArrayList;
import java.util.ListIterator;public class Test06 {/*** 深入迭代器 -- ListIterator* * 需求:使用ListIterator遍歷元素,遍歷到"bbb"時添加"xyz"*/public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");list.add("eee");ListIterator<String> listIterator = list.listIterator();while(listIterator.hasNext()){String element = listIterator.next();//當元素為bbb時,添加xyzif(element.equals("bbb")){listIterator.add("xyz");}}//遍歷集合for (String element : list) {System.out.println(element);}}
}

7、使用ListIterator遍歷元素,遍歷到"bbb"時替換成"xyz"

package com.xx.iterator01;import java.util.ArrayList;
import java.util.ListIterator;public class Test07 {/*** 深入迭代器 -- ListIterator* * 需求:使用ListIterator遍歷元素,遍歷到"bbb"時替換成"xyz"*/public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");list.add("eee");ListIterator<String> listIterator = list.listIterator();while(listIterator.hasNext()){String element = listIterator.next();//當元素為bbb時,設置bbb替換成xyzif(element.equals("bbb")){listIterator.set("xyz");}}//遍歷集合for (String element : list) {System.out.println(element);}}
}

8、使用ListIterator指定下標遍歷元素

package com.xx.iterator01;import java.util.ArrayList;
import java.util.ListIterator;public class Test08 {/*** 深入迭代器 -- ListIterator* * 需求:使用ListIterator指定下標遍歷元素*/public static void main(String[] args) {//新建一個集合ArrayList<String> list = new ArrayList<>();//添加元素list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");list.add("eee");//獲取迭代器,從下標為1的開始ListIterator<String> listIterator = list.listIterator(1);while(listIterator.hasNext()){String element = listIterator.next();System.out.println(element);}}
}

9、使用ListIterator倒序遍歷元素

package com.qf.iterator01;import java.util.ArrayList;
import java.util.ListIterator;public class Test09 {/*** 深入迭代器 -- ListIterator* * 需求:使用ListIterator倒序遍歷元素*/public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");list.add("eee");//獲取一個迭代器,從集合末尾開始ListIterator<String> listIterator = list.listIterator(list.size());//當迭代器中,前一個位置有元素時,繼續循環while(listIterator.hasPrevious()){//將前一個元素賦值給elementString element = listIterator.previous();System.out.println(element);}}
}

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

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

相關文章

?第18章:JDK8-17新特性

1. 新特性概述 > 角度1&#xff1a;新的語法規則 &#xff08;多關注&#xff09;比如&#xff1a;lambda表達式、enum、annotation、自動拆箱裝箱、接口中的默認方法和靜態方法、switch表達式、record等> 角度2&#xff1a;增加、過時、刪除API比如&#xff1a;新的日期…

《子數整數》

描述 對于一個五位數a1?a2?a3?a4?a5?&#xff0c;可將其拆分為三個子數&#xff1a; sub1?a1?a2?a3? sub2?a2?a3?a4? sub3?a3?a4?a5? 例如&#xff0c;五位數20207可以拆分成 sub1?202 sub2?020(20) sub3?207 現在給定一個正整數K&#xff0c;要求你編程求…

【系統架構師】-論文-系統安全性與保密性設計

1、摘要: 2018 年初&#xff0c;我所在的公司為一票務公司開發開票業務平臺的建設。我在該項目中擔任系統架構設計師的職務&#xff0c;主要負責設計平臺系統架構和安全體系架構。該平臺以采用 B/S 架構服務用戶&#xff0c;采用”平臺應用”的模式解決現有應用單機獨立開票的模…

【YOLOv5/v7改進系列】替換激活函數為SiLU、ReLU、LeakyReLU、FReLU、PReLU、Hardswish、Mish、ELU等

一、導言 激活函數在目標檢測中的作用至關重要&#xff0c;它們主要服務于以下幾個關鍵目的&#xff1a; 引入非線性&#xff1a;神經網絡的基本構建塊&#xff08;如卷積層、全連接層等&#xff09;本質上是線性變換&#xff0c;而激活函數通過引入非線性&#xff0c;使得網絡…

urllib3 發起https請求時報錯 certificate verify failed

情況描述 近期需要訪問https的一個API接口同步數據&#xff0c;在辦公主機完成urllib3初步的測試以后&#xff0c;到測試環境驗證發現無法請求&#xff0c;報錯&#xff1a; 提示&#xff1a;解決辦法可以直接到第四節查看 一、提示 SSL 認證失敗 OpenSSL.SSL.Error: [(SSL …

保安維穩,四信以科技構筑高速公路安全智慧防線

近日&#xff0c;廣東梅大高速發生嚴重塌方事故&#xff0c;造成了嚴重的人員傷亡和財產損失。這一事件在公眾心中敲響了安全的警鐘&#xff0c;再次引起了公眾對于交通設施運營安全性的重點關注。 國務院安委會辦公室和國家防災減災救災委員會辦公室等主管機構先后印發緊急通知…

Spring Security整合Gitee第三方登錄

文章目錄 學習鏈接環境準備1. 搭建基本web應用引入依賴ThirdApp啟動類創建index頁面application.yml配置訪問測試 2. 引入security引入依賴ProjectConfig訪問測試 第三方認證簡介注冊gitee客戶端實現1引入依賴application.yml配置文件創建index.html頁面啟動類InfoControllerPr…

【數學建模】儲藥柜的設計

2014高教社杯全國大學生數學建模競賽D題目 題目描述 儲藥柜的結構類似于書櫥&#xff0c;通常由若干個橫向隔板和豎向隔板將儲藥柜分割成若干個儲藥槽(如圖1所示)。為保證藥品分揀的準確率&#xff0c;防止發藥錯誤&#xff0c;一個儲藥槽內只能擺放同一種藥品。藥品在儲藥槽…

Python閉包探索,釋放函數記憶的秘術

引言 hello&#xff0c;大家好&#xff0c;我是一點&#xff0c;專注于Python編程&#xff0c;如果你也對感Python感興趣&#xff0c;歡迎關注交流。 希望可以持續更新一些有意思的文章&#xff0c;如果覺得還不錯&#xff0c;歡迎點贊關注&#xff0c;有啥想說的&#xff0c;可…

docker搭建gitlab及默認密碼修改及配置修改

推薦官方文檔 https://docs.gitlab.com/17.0/ee/install/docker.html 我使用的是docker run的方式&#xff0c;官方文檔后面有docker-compose、swarm、k8s的部署文檔 版本說明 1&#xff1a;可以部署gitlab-ce社區版和gitlab-ee企業版&#xff0c;然后&#xff0c;鑒于是個人…

Mysql總結2

Mysql慢優化 在mysql中&#xff0c;long_query_time的值為10&#xff0c;當sql語句執行的時間超過這個數值時&#xff0c;則會被記錄到慢查詢日志中。 Mysql語句查詢流程 1、客戶端發送sql語句到服務端&#xff1b; 2、服務端查看是否打開了緩存&#xff0c;若緩存打開&…

AIGC繪畫設計基礎-建筑設計應用

一、AI及AIGC 對于AI大家都不陌生&#xff0c;但是AIGC這個概念好多人其實不大清楚。“AI”是指人工智能技術本身&#xff0c;而“AIGC”是指基于人工智能技術而生成的內容。 生成式人工智能——AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;&…

近鄰算法詳解

近鄰算法&#xff08;Nearest Neighbor Algorithm&#xff09;&#xff0c;也稱為K-近鄰算法&#xff08;K-Nearest Neighbors&#xff0c;KNN&#xff09;&#xff0c;是一種基本的分類和回歸方法。它的工作原理非常直觀&#xff1a;通過測量不同特征點之間的距離來進行預測。…

使用CommandLine庫創建.NET命令行應用

CommandLine是一個.NET庫&#xff0c;用于創建命令行應用程序。它提供了一種簡單的方法來解析命令行參數&#xff0c;并且可以幫助您構建一個功能強大的命令行界面。在本文中&#xff0c;我們將介紹如何使用CommandLine庫創建.NET命令行應用程序。 1. 背景 在.NET開發中&#…

SpringFramework實戰指南

二、SpringFramework實戰指南 目錄 一、技術體系結構 1.1 總體技術體系1.2 框架概念和理解 二、SpringFramework介紹 2.1 Spring 和 SpringFramework概念2.2 SpringFramework主要功能模塊2.3 SpringFramework 主要優勢 三、Spring IoC容器和核心概念 3.1 組件和組件管理概念3…

起底震網病毒的來龍去脈

2010年&#xff0c;震網病毒被發現&#xff0c;引起世界嘩然&#xff0c;在后續的10年間&#xff0c;陸陸續續有更多關于該病毒的背景和細節曝光。今年&#xff0c;《以色列時報》和《荷蘭日報》又披露了關于此事件的更多信息&#xff0c;基于這些信息&#xff0c;我們重新梳理…

優于InstantID!中山大學提出ConsistentID:可以僅使用單個圖像根據文本提示生成不同的個性化ID圖像

給定一些輸入ID的圖像&#xff0c;ConsistentID可以僅使用單個圖像根據文本提示生成不同的個性化ID圖像。效果看起來也是非常不錯。 相關鏈接 Code:https://github.com/JackAILab/ConsistentID Paper&#xff1a;https://ssugarwh.github.io/consistentid.github.io/arXiv.pd…

計算機畢業設計 | springboot養老院管理系統 老人社區管理(附源碼)

1&#xff0c;緒論 1.1 背景調研 養老院是集醫療、護理、康復、膳食、社工等服務服務于一體的綜合行養老院&#xff0c;經過我們前期的調查&#xff0c;院方大部分工作采用手工操作方式,會帶來工作效率過低&#xff0c;運營成本過大的問題。 院方可用合理的較少投入取得更好…

Python數據可視化(七)

繪制 3D 圖形 到目前為止&#xff0c;我們一直在討論有關 2D 圖形的繪制方法和繪制技術。3D 圖形也是數據可視化的 一個很重要的應用方面&#xff0c;我們接下來就重點講解有關 3D 圖形的實現方法。繪制 3D 圖形通常需要導 入 mpl_toolkits 包中的 mplot3d 包的相關模塊&#x…