Java中Iterator迭代器的使用詳解
Iterator接口
在程序開發(fā)中,經(jīng)常需要遍歷集合中的所有元素。針對這種需求,JDK專門提供了一個接口java.util.Iterator。Iterator接口也是Java集合中的一員,但它與Collection、Map接口有所不同,Collection接口與Map接口主要用于存儲元素,而Iterator主要用于迭代訪問(即遍歷)Collection中的元素,因此Iterator對象也被稱為迭代器。 想要遍歷Collection集合,那么就要獲取該集合迭代器完成迭代操作,下面介紹一下獲取迭代器的方法:
public Iterator iterator(): 獲取集合對應(yīng)的迭代器,用來遍歷集合中的元素的。
下面介紹一下迭代的概念:
迭代:即Collection集合元素的通用獲取方式。在取元素之前先要判斷集合中有沒有元素,如果有,就把這個元素取出來,繼續(xù)在判斷,如果還有就再取出出來。一直把集合中的所有元素全部取出。這種取出方式專業(yè)術(shù)語稱為迭代。
Iterator接口的常用方法如下:
- public E next():返回迭代的下一個元素。
- public boolean hasNext():如果仍有元素可以迭代,則返回 true。
接下來我們通過案例學(xué)習(xí)如何使用Iterator迭代集合中元素:
public class IteratorDemo { public static void main(String[] args) { // 使用多態(tài)方式 創(chuàng)建對象 Collection<String> coll = new ArrayList<String>(); // 添加元素到集合 coll.add("張三"); coll.add("李四"); coll.add("王五"); //遍歷 //使用迭代器 遍歷 每個集合對象都有自己的迭代器 Iterator<String> it = coll.iterator(); // 泛型指的是 迭代出 元素的數(shù)據(jù)類型 while(it.hasNext()){ //判斷是否有迭代元素 String s = it.next();//獲取迭代出的元素 System.out.println(s); } } }
tips::在進行集合元素取出時,如果集合中已經(jīng)沒有元素了,還繼續(xù)使用迭代器的next方法,將會發(fā)生java.util.NoSuchElementException沒有集合元素的錯誤。
迭代器的實現(xiàn)原理
我們在之前案例已經(jīng)完成了Iterator遍歷集合的整個過程。當(dāng)遍歷集合時,首先通過調(diào)用t集合的iterator()方法獲得迭代器對象,然后使用hashNext()方法判斷集合中是否存在下一個元素,如果存在,則調(diào)用next()方法將元素取出,否則說明已到達了集合末尾,停止遍歷元素。 Iterator迭代器對象在遍歷集合時,內(nèi)部采用指針的方式來跟蹤集合中的元素,為了讓初學(xué)者能更好地理解迭代器的工作原理,接下來通過一個圖例來演示Iterator對象迭代元素的過程:
在調(diào)用Iterator的next方法之前,迭代器的索引位于第一個元素之前,不指向任何元素,當(dāng)?shù)谝淮握{(diào)用迭代器的next方法后,迭代器的索引會向后移動一位,指向第一個元素并將該元素返回,當(dāng)再次調(diào)用next方法時,迭代器的索引會指向第二個元素并將該元素返回,依此類推,直到hasNext方法返回false,表示到達了集合的末尾,終止對元素的遍歷。
增強for
增強for循環(huán)(也稱for each循環(huán))是JDK1.5以后出來的一個高級for循環(huán),專門用來遍歷數(shù)組和集合的。它的內(nèi)部原理其實是個Iterator迭代器,所以在遍歷的過程中,不能對集合中的元素進行增刪操作。 格式:
for(元素的數(shù)據(jù)類型 變量 : Collection集合or數(shù)組){ //寫操作代碼 }
它用于遍歷Collection和數(shù)組。通常只進行遍歷元素,不要在遍歷的過程中對集合元素進行增刪操作。
練習(xí)1:遍歷數(shù)組
public class NBForDemo1 { public static void main(String[] args) { int[] arr = {3,5,6,87}; //使用增強for遍歷數(shù)組 for(int a : arr){//a代表數(shù)組中的每個元素 System.out.println(a); } } }
練習(xí)2:遍歷集合
public class NBFor { public static void main(String[] args) { Collection<String> coll = new ArrayList<String>(); coll.add("張三"); coll.add("李四"); coll.add("王五"); //使用增強for遍歷 for(String s :coll){//接收變量s代表 代表被遍歷到的集合元素 System.out.println(s); } } }
tips: 新for循環(huán)必須有被遍歷的目標(biāo)。目標(biāo)只能是Collection或者是數(shù)組。新式for僅僅作為遍歷操作出現(xiàn)。
到此這篇關(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)文章
Java實現(xiàn)根據(jù)前端所要格式返回樹形3級層級數(shù)據(jù)
這篇文章主要為大家詳細介紹了Java如何實現(xiàn)根據(jù)前端所要格式返回樹形3級層級數(shù)據(jù),文中的示例代碼講解詳細,有需要的小伙伴可以了解下2024-02-02基于Mybatis實現(xiàn)CRUD操作過程解析(xml方式)
這篇文章主要介紹了基于Mybatis實現(xiàn)CRUD操作過程解析(xml方式),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11Springboot通過請求頭獲取當(dāng)前用戶信息方法詳細示范
這篇文章主要介紹了Springboot通過請求頭獲取當(dāng)前用戶信息的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-11-11java 獲取冒號后面的參數(shù)(正則)實現(xiàn)代碼
這篇文章主要介紹了java 獲取冒號后面的參數(shù)(正則)實現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08SpringBoot后端接收參數(shù)優(yōu)化代碼示例(統(tǒng)一處理前端參數(shù))
使用Spring Boot開發(fā)API的時候,讀取請求參數(shù)是服務(wù)端編碼中最基本的一項操作,下面這篇文章主要給大家介紹了關(guān)于SpringBoot后端接收參數(shù)優(yōu)化(統(tǒng)一處理前端參數(shù))的相關(guān)資料,需要的朋友可以參考下2024-07-07