Java Iterator介面遍歷單列集合迭代器原理詳解
這篇文章主要介紹了Java Iterator介面遍歷單列集合迭代器原理詳解,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
Iterator介面概述
在程式開發中,經常需要遍歷集合中的所有元素。針對這種需求,JDK專門提供了一個介面java.util.Iterator 。 Iterator 介面也是Java集合中的一員,但它與 Collection 、 Map 介面有所不同,Collection 介面與 Map 介面主要用於儲存元素,而 Iterator 主要用於迭代訪問(即遍歷) Collection 中的元素,因此 Iterator 物件也被稱為迭代器。
迭代的概念
迭代:即Collection集合元素的通用獲取方式。在取元素之前先要判斷集合中有沒有元素,如果有,就把這個元素取出來,繼續在判斷,如果還有就再取出出來。一直把集合中的所有元素全部取出。這種取出方式專業術語稱為迭代。
獲取迭代器
Iterator迭代器,是一個介面,我們無法直接使用,需要使用Iterator介面的實現類物件,獲取實現類的方式比較特殊Collection介面中有一個方法,叫iterator(),這個方法返回的就是迭代器的實現類物件Iterator<E> iterator() 返回在此 collection 的元素上進行迭代的迭代器。
public Iterator iterator() : 獲取集合對應的迭代器,用來遍歷集合中的元素的。
Iterator介面的常用方法如下:
public E next() :返回迭代的下一個元素
public boolean hasNext() :如果仍有元素可以迭代,則返回 true。
迭代器的使用步驟
- 使用集合中的方法iterator()獲取迭代器的實現類物件,使用Iterator介面接收(多型)
- 使用Iterator介面中的方法hasNext判斷還有沒有下一個元素
- 使用Iterator介面中的方法next取出集合中的下一個元素
程式碼舉例
package demo02; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Demo01Iterator { public static void main(String[] args) { //建立一個集合物件 Collection<Integer> coll = new ArrayList<>(); //往集合中新增元素 自動裝箱 coll.add(1); coll.add(2); coll.add(3); coll.add(4); /* 1.使用集合中的方法iterator()獲取迭代器的實現類物件,使用Iterator介面接收(多型) 注意: Iterator<E>介面也是有泛型的,迭代器的泛型跟著集合走,集合是什麼泛型,迭代器就是什麼泛型 */ //多型 介面 實現類物件 Iterator<Integer> it = coll.iterator(); //2.使用Iterator介面中的方法hasNext判斷還有沒有下一個元素 while (it.hasNext()) { //3.使用Iterator介面中的方法next取出集合中的下一個元素 System.out.println(it.next()); } } }
程式碼執行後的結果
tips:在進行集合元素取出時,如果集合中已經沒有元素了,還繼續使用迭代器的next方法,將會發生java.util.NoSuchElementException沒有集合元素的錯誤。
迭代器的實現原理
當遍歷集合時,首先通過呼叫Collection集合的iterator()方法獲得迭代器物件,然後使用hashNext()方法判斷集合中是否存在下一個元素,如果存在,則呼叫next()方法將元素取出,否則說明已到達了集合末尾,停止遍歷元素。Iterator迭代器物件在遍歷集合時,內部採用指標的方式來跟蹤集合中的元素,為了讓初學者能更好地理解迭代器的工作原理,接下來通過一個圖例來演示Iterator物件迭代元素的過程:
在呼叫Iterator的next方法之前,迭代器的索引位於第一個元素之前,不指向任何元素,當第一次呼叫迭代器的next方法後,迭代器的索引會向後移動一位,指向第一個元素並將該元素返回,當再次呼叫next方法時,迭代器的索引會指向第二個元素並將該元素返回,依此類推,直到hasNext方法返回false,表示到達了集合的末尾,終止對元素的遍歷。
增強for
增強for迴圈(也稱for each迴圈)是JDK1.5以後出來的一個高階for迴圈,專門用來遍歷陣列和集合的。它的內部原理其實是個Iterator迭代器,所以在遍歷的過程中,不能對集合中的元素進行增刪操作。 為什麼集合和陣列都可以使用增強for迴圈進行遍歷?因為實現了只要實現了Iterable<T>介面就允許物件成為 "foreach" 語句的目標。而Collection<E>extends Iterable<E>這個介面,所以所有的單列集合都可以使用增強for。
作用:
它用於遍歷Collection和陣列。通常只進行遍歷元素,不要在遍歷的過程中對集合元素進行增刪操作。
格式:
程式碼舉例
遍歷陣列
package demo02Iterator; public class ForArray { public static void main(String[] args) { int[] arr = {3,5,6,87}; //使用增強for遍歷陣列 for (int a : arr) {//a代表陣列中的每個元素 System.out.print(a + " ");//3 5 6 87 } } }
遍歷集合
package demo02Iterator; import java.util.ArrayList; import java.util.Collection; public class ForArrayList { 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.print(s + " ");//小河神 老河神 神婆 } } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。