最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的迭代器和foreach原理

 更新時(shí)間:2020年09月08日 11:05:55   作者:崔笑顏  
這篇文章主要介紹了Java中的迭代器和foreach原理,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下

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

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

1、Iterator接口中的常用方法

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

注意:

  • 1.在調(diào)用next()方法之前必須要調(diào)用hasNext()方法進(jìn)行判斷。如果下一條記錄無(wú)效,而且又沒(méi)有調(diào)用hasNext()方法進(jìn)行判斷,那么直接調(diào)用next()方法就會(huì)拋出NoSuchElementException異常。
  • 2.Iterator可以刪除集合的元素,但是是通過(guò)迭代器對(duì)象的remove方法,不是集合對(duì)象的remove方法。
  • 3.如果還未調(diào)用next()方法或在上一次調(diào)用next()方法之后已經(jīng)調(diào)用了remove()方法,再調(diào)用remove()方法都會(huì)報(bào)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í)行原理如下圖所示:

集合對(duì)象每次調(diào)用iterator()方法得到的迭代器對(duì)象,默認(rèn)指針(游標(biāo))都在集合的第一個(gè)元素之前。我們?cè)谑褂玫鲿r(shí),首先會(huì)使用hasNext()方法判斷集合中是否還有下一個(gè)元素,如果有就會(huì)調(diào)用next()方法,調(diào)用next()方法分為兩個(gè)步驟:一是把當(dāng)前指針下移一位,二是將下移以后位置上的元素返回,如上圖所示。

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

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

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)是怎樣實(shí)現(xiàn)的呢?
下面我們來(lái)看一下上述代碼編譯后的源碼文件,如下所示:

編譯后的源碼如下:

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ù)組時(shí),底層仍然是通過(guò)for循環(huán)實(shí)現(xiàn)的;而遍歷集合時(shí),底層是通過(guò)迭代器實(shí)現(xiàn)的。

以上就是Java中的迭代器和foreach原理的詳細(xì)內(nèi)容,更多關(guān)于Java 迭代器和foreach的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 聊聊springboot?整合?hbase的問(wèn)題

    聊聊springboot?整合?hbase的問(wèn)題

    這篇文章主要介紹了springboot?整合?hbase的問(wèn)題,文中給大家提到配置linux服務(wù)器hosts及配置window?hosts的相關(guān)知識(shí),需要的朋友可以參考下
    2021-11-11
  • IntelliJ IDEA查看項(xiàng)目git路徑的三種方式

    IntelliJ IDEA查看項(xiàng)目git路徑的三種方式

    這篇文章主要介紹了IntelliJ IDEA查看項(xiàng)目git路徑的三種方式,文中通過(guò)圖文結(jié)合的方式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-12-12
  • 詳解Java如何實(shí)現(xiàn)數(shù)值校驗(yàn)的算法

    詳解Java如何實(shí)現(xiàn)數(shù)值校驗(yàn)的算法

    給定一個(gè)字符串如何判斷它是否為數(shù)值類型?本文將帶著大家學(xué)習(xí)一下如何利用Java實(shí)現(xiàn)這個(gè)判斷算法,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-04-04
  • SpringBoot?異步線程間傳遞上下文方式

    SpringBoot?異步線程間傳遞上下文方式

    這篇文章主要介紹了SpringBoot?異步線程間傳遞上下文方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java文件上傳至ftp服務(wù)器的方法

    java文件上傳至ftp服務(wù)器的方法

    這篇文章主要為大家詳細(xì)介紹了java文件上傳至ftp服務(wù)器的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java實(shí)例講解動(dòng)態(tài)代理

    Java實(shí)例講解動(dòng)態(tài)代理

    動(dòng)態(tài)代理指的是,代理類和目標(biāo)類的關(guān)系在程序運(yùn)行的時(shí)候確定的,客戶通過(guò)代理類來(lái)調(diào)用目標(biāo)對(duì)象的方法,是在程序運(yùn)行時(shí)根據(jù)需要?jiǎng)討B(tài)的創(chuàng)建目標(biāo)類的代理對(duì)象。本文將通過(guò)案例詳細(xì)講解一下動(dòng)態(tài)代理,需要的可以參考一下
    2022-06-06
  • java FastJson的簡(jiǎn)單用法

    java FastJson的簡(jiǎn)單用法

    FastJson是阿里的開源JSON解析庫(kù),可以解析JSON格式的字符串,支持將Java Bean序列化為JSON字符串,也可以從JSON字符串反序列化到JavaBean,這里我介紹一下FastJson的使用,感興趣的朋友一起看看吧
    2021-09-09
  • Compare And Swap底層原理及代碼示例詳解

    Compare And Swap底層原理及代碼示例詳解

    這篇文章主要介紹了Compare And Swap底層原理及代碼示例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Mybatis中流式查詢的實(shí)現(xiàn)示例

    Mybatis中流式查詢的實(shí)現(xiàn)示例

    MyBatis的ResultHandler是用于處理數(shù)據(jù)庫(kù)查詢結(jié)果集的工具,可以通過(guò)回調(diào)函數(shù)對(duì)數(shù)據(jù)進(jìn)行流式處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • 修改idea運(yùn)行內(nèi)存大小的方法總結(jié)

    修改idea運(yùn)行內(nèi)存大小的方法總結(jié)

    在開發(fā)過(guò)程中,總會(huì)遇到idea運(yùn)行內(nèi)存不足,所以本文小編給大家介紹了修改idea運(yùn)行內(nèi)存大小的兩種方法,文中通過(guò)圖文給大家講解的非常詳細(xì),需要的朋友可以參考下
    2023-12-12

最新評(píng)論

西平县| 汕尾市| 察雅县| 东乡县| 呼图壁县| 子长县| 德化县| 太白县| 正镶白旗| 台南县| 赞皇县| 施甸县| 河北区| 吉林省| 巴彦淖尔市| 穆棱市| 桂林市| 宜州市| 双流县| 上思县| 郎溪县| 久治县| 大足县| 额尔古纳市| 恩施市| 荔浦县| 肇东市| 苏州市| 长治县| 靖州| 拉萨市| 安宁市| 大冶市| 小金县| 辰溪县| 徐水县| 靖州| 余干县| 安新县| 长垣县| 乌鲁木齐县|