亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

Java中的迭代器和foreach原理

瀏覽:2日期:2022-08-25 13:04:12

迭代器是一種設(shè)計模式,它的定義為:提供一種方法訪問一個容器對象中的各個元素,而又不需暴露該容器對象的內(nèi)部細節(jié)。迭代器模式,就是為容器而生。

在Java中,Iterator稱為迭代器,主要用于遍歷 Collection 集合中的元素。Iterator 僅用于遍歷集合,Iterator 本身并不提供承裝對象的能力。如果需要創(chuàng)建Iterator 對象,則必須有一個被迭代的集合。Collection接口繼承了java.lang.Iterable接口,該接口有一個iterator()方法,那么所有實現(xiàn)了Collection接口的集合類都有一個iterator()方法,用以返回一個實現(xiàn)了Iterator接口的對象。并且集合對象每次調(diào)用iterator()方法都得到一個全新的迭代器對象,默認指針(游標)都在集合的第一個元素之前。

1、Iterator接口中的常用方法

boolean hasNext():判斷集合中是否還有下一個元素E next():返回下一個元素void remove():刪除元素

注意:

1.在調(diào)用next()方法之前必須要調(diào)用hasNext()方法進行判斷。如果下一條記錄無效,而且又沒有調(diào)用hasNext()方法進行判斷,那么直接調(diào)用next()方法就會拋出NoSuchElementException異常。 2.Iterator可以刪除集合的元素,但是是通過迭代器對象的remove方法,不是集合對象的remove方法。 3.如果還未調(diào)用next()方法或在上一次調(diào)用next()方法之后已經(jīng)調(diào)用了remove()方法,再調(diào)用remove()方法都會報IllegalStateException異常。

2.Iterator的使用方法(遍歷集合)

Collection coll=new ArrayList();coll.add(123);coll.add(456);coll.add(789);coll.add(new Person('Tom',12));Iterator iterator = coll.iterator();while(iterator.hasNext()){ System.out.println(iterator.next());}

3、Iterator的執(zhí)行原理

迭代器的執(zhí)行原理如下圖所示:

Java中的迭代器和foreach原理

集合對象每次調(diào)用iterator()方法得到的迭代器對象,默認指針(游標)都在集合的第一個元素之前。我們在使用迭代器時,首先會使用hasNext()方法判斷集合中是否還有下一個元素,如果有就會調(diào)用next()方法,調(diào)用next()方法分為兩個步驟:一是把當前指針下移一位,二是將下移以后位置上的元素返回,如上圖所示。

4、增強for循環(huán):foreach

在Java 5.0提供了一種新的迭代訪問 Collection和數(shù)組的方法,就是foreach循環(huán)。使用foreach循環(huán)執(zhí)行遍歷操作不需獲取Collection或數(shù)組的長度,也不需要使用索引訪問元素。使用方法如下所示:

Java中的迭代器和foreach原理

public static void main(String[] args) { int[] ints={1,2,3,4}; for (int i:ints) { System.out.println(i); } Collection coll = new ArrayList(); coll.add(123); coll.add(456); coll.add(789); coll.add(new Person(1001, 'Tom')); for (Object object:coll) { System.out.println(object); }}

那么foreach循環(huán)是怎樣實現(xiàn)的呢?下面我們來看一下上述代碼編譯后的源碼文件,如下所示:

Java中的迭代器和foreach原理

編譯后的源碼如下:

public static void main(String[] args) { int[] ints = new int[]{1, 2, 3, 4}; int[] var2 = ints; int var3 = ints.length; for(int var4 = 0; var4 < var3; ++var4) { int i = var2[var4]; System.out.println(i); } Collection coll = new ArrayList(); coll.add(123); coll.add(456); coll.add(789); coll.add(new Person(1001, 'Tom')); Iterator var7 = coll.iterator(); while(var7.hasNext()) { Object object = var7.next(); System.out.println(object); } }

由編譯后的源碼可知,使用foreach循環(huán)遍歷數(shù)組時,底層仍然是通過for循環(huán)實現(xiàn)的;而遍歷集合時,底層是通過迭代器實現(xiàn)的。

以上就是Java中的迭代器和foreach原理的詳細內(nèi)容,更多關(guān)于Java 迭代器和foreach的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 亚洲v欧美v日韩v国产v | 免费观看黄色网 | 成年轻人在线看片 | 欧美成人影院 在线播放 | 高清一级做a爱免费视 | 久热在线播放中文字幕 | 真实一级一级一片免费视频 | 第一福利在线观看 | 伊人蕉久中文字幕无码专区 | 福利社区在线观看 | 国产主播一区二区三区 | 很很射影院 | 水蜜桃爱爱yy视频在线观看 | 国产精品免费αv视频 | 九九热在线视频免费观看 | 日韩亚洲欧美一区二区三区 | 在线毛片一区二区不卡视频 | 日韩大片在线播放 | 国产成人高清一区二区私人 | 青青操操| 国产高清国内精品福利99久久 | 国产成人影院在线观看 | 性精品 | 秘书高跟黑色丝袜国产91在线 | 成人永久福利在线观看不卡 | 99精品国内不卡在线观看 | 成人黄色视屏 | 国产肥老妇免费视频 | 精品在线免费观看 | 成人夜色香网站在线观看 | 黄色录象一级片 | 妞干网在线观看视频 | 国产成人精品日本亚洲18图 | 精品欧美一区二区三区在线 | 国产性较精品视频免费 | 精品日韩欧美国产一区二区 | 国产色产综合色产在线观看视频 | 99久久婷婷国产综合精品hsex | 欧美日韩一二三四区 | 国产视频第一页 | 综合网色 |