Java:Lterator迭代器
目錄
- Iterator接口 java.util.Iterator
- 迭代器的實現原理
- for each (內置迭代器)
Iterator接口 java.util.Iterator
在程序開發中,經常需要遍歷集合中的所有元素。Iterator接口也是Java集合中的一員,但它與Collection、Map接口有所不同,Collection接口與Map接口主要用于存儲元素,而Iterator主要用于迭代訪問(即遍歷)Collection中的元素,因此Iterator對象也被稱為迭代器。
迭代:即Collection集合元素的通用獲取方式。在取元素之前先要判斷集合中有沒有元素,如果有,就把這個元素取出來,繼續在判斷,如果還有就再取出出來。一直把集合中的所有元素全部取出。這種取出方式專業術語稱為迭代。
想要遍歷Collection集合,那么就要獲取該集合迭代器完成迭代操作,下面介紹一下獲取迭代器的方法:
- public Iterator iterator(): 獲取集合對應的迭代器,用來遍歷集合中的元素的。
Iterator接口的常用方法如下:
- public E next():返回迭代的下一個元素。
- public boolean hasNext():如果仍有元素可以迭代,則返回 true。
e.g.:
public class IteratorDemo {public static void main(String[] args) {// 使用多態方式 創建對象Collection<String> coll = new ArrayList<String>();// 添加元素到集合coll.add("Michael");coll.add("Jack");coll.add("kite");//遍歷//使用迭代器 遍歷 每個集合對象都有自己的迭代器Iterator<String> it = coll.iterator();// 泛型指的是 迭代出 元素的數據類型while(it.hasNext()){ //判斷是否有迭代元素String s = it.next();//獲取迭代出的元素System.out.println(s);}} }Tips:在進行集合元素取出時,如果集合中已經沒有元素了,還繼續使用迭代器的next方法,將會發生java.util.NoSuchElementException沒有集合元素的錯誤。
迭代器的實現原理
我們在之前案例已經完成了Iterator遍歷集合的整個過程。當遍歷集合時,首先通過調用t集合的iterator()方法獲得迭代器對象,然后使用hashNext()方法判斷集合中是否存在下一個元素,如果存在,則調用next()方法將元素取出,否則說明已到達了集合末尾,停止遍歷元素。
Iterator迭代器對象在遍歷集合時,內部采用指針的方式來跟蹤集合中的元素。
在調用Iterator的next方法之前,迭代器的索引位于第一個元素之前,不指向任何元素,當第一次調用迭代器的next方法后,迭代器的索引會向后移動一位,指向第一個元素并將該元素返回,當再次調用next方法時,迭代器的索引會指向第二個元素并將該元素返回,依此類推,直到hasNext方法返回false,表示到達了集合的末尾,終止對元素的遍歷。
for each (內置迭代器)
增強for循環(也稱for each循環)是JDK1.5以后出來的一個高級for循環,專門用來遍歷數組和集合的。它的內部原理其實是個Iterator迭代器,所以在遍歷的過程中,不能對集合中的元素進行增刪操作。
格式:
for(元素的數據類型 變量 : Collection集合or數組){ //寫操作代碼 }它用于遍歷Collection和數組。通常只進行遍歷元素,不要在遍歷的過程中對集合元素進行增刪操作。
e.g.:
public class NBForDemo1 {public static void main(String[] args) {int[] arr = {3,5,6,87};//使用增強for遍歷數組for(int a : arr){//a代表數組中的每個元素System.out.println(a);}} }e.g.:
public class NBFor {public static void main(String[] args) { Collection<String> coll = new ArrayList<String>();coll.add("Mick");coll.add("Jack");coll.add("Kite");//使用增強for遍歷for(String s :coll){//接收變量s代表 代表被遍歷到的集合元素System.out.println(s);}} }Tips: 新for循環必須有被遍歷的目標。目標只能是Collection或者是數組。新式for僅僅作為遍歷操作出現。
總結
以上是生活随笔為你收集整理的Java:Lterator迭代器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于拖延症的一些小思考
- 下一篇: java 云笔记_简单的云笔记项目源码(