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