Java使用迭代器Iterator遍歷集合
前言
上兩篇文章總結(jié)了集合體系以及Collection常用方法,本節(jié)我們來(lái)學(xué)習(xí)使用迭代器 Iterator 遍歷集合!
Iterator 概述
Iterator對(duì)象稱為迭代器(設(shè)計(jì)模式的一種),主要用于遍歷 Collection 集合中的元素。
GOF 給迭代器模式的定義為:提供一種方法訪問(wèn)一個(gè)容器對(duì)象中各個(gè)元素,而又不需暴露該對(duì)象的內(nèi)部細(xì)節(jié)。迭代器模式,就是為容器而生。
Collection 接口繼承了 java.lang.Iterable 接口,該接口有一個(gè) iterator ()方法,那么所有實(shí)現(xiàn)了 Collection 接口的集合類都有一個(gè) iterator ()方法,用以返回一個(gè)實(shí)現(xiàn)了 Iterator 接口的對(duì)象。
Iterator 僅用于遍歷集合, lterator 本身并不提供承裝對(duì)象的能力。如果需要?jiǎng)?chuàng)建 Iterator 對(duì)象,則必須有一個(gè)被迭代的集合。
集合對(duì)象每次調(diào)用 iterator() 方法都得到一個(gè)全新的迭代器對(duì)象,默認(rèn)游標(biāo)都在集合的第一個(gè)元素之前。
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); //自動(dòng)裝箱 coll.add(new String("miao")); // 遍歷集合 Iterator iterator1 = coll.iterator(); // 方式一:利用 for 循環(huán) -》不推薦 for(int i=0;i<coll.size();i++){ System.out.println(iterator1.next()); } System.out.println("-----------"); // 方式二 :利用 while 循環(huán) -》推薦 Iterator iterator2 = coll.iterator(); while(iterator2.hasNext()){ System.out.println(iterator2.next()); } } }
使用 remove 方法刪除元素
我們也可以使用迭代器中的 remove 方法刪除集合中的元素。
Collection coll = new ArrayList(); coll.add("aniu"); coll.add(123); //自動(dòng)裝箱 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 的執(zhí)行原理
Iterator iterator = coll.iterator(); while(iterator.hasNext()){ //hasnext() 判斷是否還有下一個(gè)元素 System.out.println(iterator.next()); //next 1.指針下移 2.將下移以后集合位置上的元素返回 }
使用foreach循環(huán)遍歷集合或數(shù)組
foreach循環(huán)又叫增強(qiáng)for循環(huán),對(duì)于這個(gè)應(yīng)該都很熟悉了吧,看下大概結(jié)構(gòu)!
// for(datatype 變量名 : 遍歷對(duì)象) for(Object obj:coll){ System.out.println(obj); }
內(nèi)部還是調(diào)用了迭代器!
需要注意的是,使用增強(qiáng)for循環(huán)無(wú)法改變數(shù)組里的值。
例:
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]); }
可以看到增強(qiáng)for并沒(méi)修改數(shù)組的值,本質(zhì)上是將遍歷值復(fù)制給了新變量String str,因此改變的是這個(gè)新變量的值!
到此這篇關(guān)于Java使用迭代器Iterator遍歷集合的文章就介紹到這了,更多相關(guān)Java迭代器Iterator遍歷集合內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java集合中的Iterator迭代器接口詳解
- 淺析Java迭代器Iterator和Iterable的區(qū)別
- Java中不得不知的Collection接口與Iterator迭代器
- Java中Iterator(迭代器)的用法詳解
- Java中Iterator迭代器的使用詳解
- Java集合框架迭代器Iterator實(shí)現(xiàn)原理解析
- Java如何使用Iterator迭代器刪除集合重復(fù)選項(xiàng)
- 如何實(shí)現(xiàn)java Iterator迭代器功能
- Java Iterator接口遍歷單列集合迭代器原理詳解
- Java使用Iterator迭代器遍歷集合數(shù)據(jù)的方法小結(jié)
- java集合中的迭代器Iterator和數(shù)組內(nèi)置方法及常見的報(bào)錯(cuò)解決方案
相關(guān)文章
SpringBoot讀取外部的配置文件的代碼實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot讀取外部的配置文件的代碼實(shí)現(xiàn),文中通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-11-11mybatis mapper.xml獲取insert后的自增ID問(wèn)題
這篇文章主要介紹了mybatis mapper.xml獲取insert后的自增ID問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05微信支付java版V3驗(yàn)證數(shù)據(jù)合法性(Deom)
這篇文章主要介紹了微信支付java版V3驗(yàn)證數(shù)據(jù)合法性(Deom)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09java使用EditText控件時(shí)不自動(dòng)彈出輸入法的方法
這篇文章主要介紹了java使用EditText控件時(shí)不自動(dòng)彈出輸入法的方法,需要的朋友可以參考下2015-03-03Java編程關(guān)于子類重寫父類方法問(wèn)題的理解
這篇文章主要介紹了Java編程關(guān)于子類重寫父類方法問(wèn)題的理解,分享了有關(guān)子類重寫父類的實(shí)例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11SpringBoot+Redis?BitMap實(shí)現(xiàn)簽到與統(tǒng)計(jì)的項(xiàng)目實(shí)踐
最近項(xiàng)目里需要集成簽到和統(tǒng)計(jì)功能,連續(xù)簽到后會(huì)給用戶發(fā)放一些優(yōu)惠券和獎(jiǎng)品,以此來(lái)吸引用戶持續(xù)在該品臺(tái)進(jìn)行活躍,本文就詳細(xì)的介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下2023-09-09使用filter實(shí)現(xiàn)url級(jí)別內(nèi)存緩存示例
這篇文章主要介紹了使用filter實(shí)現(xiàn)url級(jí)別內(nèi)存緩存示例,只需要一個(gè)靜態(tài)類,在filter中調(diào)用,也可以全部寫到filt里面??梢愿鶕?jù)查詢參數(shù)分別緩存,需要的朋友可以參考下2014-03-03