Java Review (二十五、集合----- Iterator接口)

      網友投稿 641 2022-05-30

      Iterator接口 也是 Java 集合框架的成員 , 但它與 Collection 系列 、 Map 系列 的集合不 一樣 : Collection系列集合、 Map 系列集合主要用于盛裝其他對象,而 Iterator 則主要用于遍歷(即迭代訪問) Collection集合中的元素, Iterator 對象也被稱為迭代器 。

      Iterator 接口隱藏了各種 Collection實現類的底層細節,向應用程序提供了遍歷 Collection 集合元素的統一編程接口 。

      Iterator 接口里定義了如下 4 個方法 :

      boolean hasNext(): 如果被迭代的集合元素還沒有被遍歷完 ,則返回 true 。

      Object next(): 返回集合里的下一個元素 。

      void remove(): 刪除集合里上一次 next 方法返回的元素 。

      void forEachRemaining(Consumer action) ,這是 Java 8 為Iterator 新增的默認方法,該方法可使用Lambda 表達式來遍歷集合元素 。

      下面程序示范了通過 Iterator 接口來遍歷集合元素 :

      public class IteratorTest { public static void main(String[] args) { // 創建集合、添加元素的代碼與前一個程序相同 Collection books = new HashSet(); books.add("輕量級Java EE企業應用實戰"); books.add("瘋狂Java講義"); books.add("瘋狂Android講義"); // 獲取books集合對應的迭代器 Iterator it = books.iterator(); while(it.hasNext()) { // it.next()方法返回的數據類型是Object類型,因此需要強制類型轉換 String book = (String)it.next(); System.out.println(book); if (book.equals("瘋狂Java講義")) { // 從集合中刪除上一次next方法返回的元素 it.remove(); } // 對book變量賦值,不會改變集合元素本身 book = "測試字符串"; //① } System.out.println(books); } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      Iterator 僅用于遍歷集合 , Iterator 本身并不提供盛裝對象的能力 。

      當使用 Iterator 迭代訪問 Collection 集合元素時 , Collection 集合里的元素不能被改變,只有通過Iterator 的 remove()方法刪除上 一 次 next()方法返回的集合元素才可以;否則將會引發 java .util.ConcurrentModificationException 異常 。 下面程序示范了這一 點 :

      public class IteratorErrorTest { public static void main(String[] args) { // 創建集合、添加元素的代碼與前一個程序相同 Collection books = new HashSet(); books.add("輕量級Java EE企業應用實戰"); books.add("瘋狂Java講義"); books.add("瘋狂Android講義"); // 獲取books集合對應的迭代器 Iterator it = books.iterator(); while(it.hasNext()) { String book = (String)it.next(); System.out.println(book); if (book.equals("瘋狂Android講義")) { // 使用Iterator迭代過程中,不可修改集合元素,下面代碼引發異常 books.remove(book); } } } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      Iterator 法代器采用的是快速失敗( fail-fast ) 機制, 一 旦在迭代過程中檢測到該集合己經被修改(通常是程序中的其他線程修改),程序立即引發 ConcurrentModificationException 異常,而不是顯示修改后的結果,這樣可以避免共享資源而引發的潛在問題。

      Java 8 起為Iterator 新增了 一個 forEachRemaining(Consumer action)方法,該方法所需的 Consumer參數同樣也是函數式接口 。 當程序調用 Iterator 的 forEachRemaining(Consumer action)遍歷集合元素時,程序會依次將集合元素傳給 Consumer的 accept(T t)方法(該接口中唯一的抽象方法) 。

      如下程序示范了使用 Lambda 表達式來遍歷集合元素:

      public class IteratorEach { public static void main(String[] args) { // 創建集合、添加元素的代碼與前一個程序相同 Collection books = new HashSet(); books.add("輕量級Java EE企業應用實戰"); books.add("瘋狂Java講義"); books.add("瘋狂Android講義"); // 獲取books集合對應的迭代器 Iterator it = books.iterator(); // 使用Lambda表達式(目標類型是Comsumer)來遍歷集合元素 it.forEachRemaining(obj -> System.out.println("迭代集合元素:" + obj)); } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      除了使用迭代器以外,使用 Java 5 提供的 foreach 循環迭代訪問集合元素更加便捷 。

      如下程序示范了使用 foreach 循環來迭代訪問集合元素 :

      public class ForeachTest { public static void main(String[] args) { // 創建集合、添加元素的代碼與前一個程序相同 Collection books = new HashSet(); books.add(new String("輕量級Java EE企業應用實戰")); books.add(new String("瘋狂Java講義")); books.add(new String("瘋狂Android講義")); for (Object obj : books) { // 此處的book變量也不是集合元素本身 String book = (String)obj; System.out.println(book); if (book.equals("瘋狂Android講義")) { // 下面代碼會引發ConcurrentModificationException異常 books.remove(book); //① } } System.out.println(books); } }

      1

      2

      3

      Java Review (二十五、集合----- Iterator接口)

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      API:java.util.Iterator

      參考:

      【1】:《瘋狂Java講義》

      Android Java

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:全球首家!華為云災備能力獲國際權威組織最高等級評定
      下一篇:疫情籠罩下,物聯網和5G如何見招拆招?
      相關文章
      亚洲国产超清无码专区| 亚洲精品无码久久毛片波多野吉衣| 亚洲人和日本人jizz| 久久精品国产亚洲av麻豆小说| 亚洲乱码中文字幕综合| 亚洲女同成av人片在线观看| 色久悠悠婷婷综合在线亚洲| 亚洲av手机在线观看| 亚洲国产香蕉人人爽成AV片久久| 天天综合亚洲色在线精品| 精品国产_亚洲人成在线| 国产亚洲成在线播放va| 亚洲国产成人a精品不卡在线 | 亚洲日本一区二区一本一道| 亚洲Av无码国产情品久久| 亚洲Av无码乱码在线播放| 国产91成人精品亚洲精品| 亚洲国产成人久久精品软件| 中文无码亚洲精品字幕| 亚洲欧洲无码一区二区三区| 亚洲精品无码成人片久久不卡| 亚洲日韩精品A∨片无码加勒比| 亚洲高清一区二区三区电影| 亚洲av无码专区在线电影天堂| 18禁亚洲深夜福利人口| 亚洲国产婷婷香蕉久久久久久| 久久亚洲国产成人影院网站 | 亚洲日本久久一区二区va| 亚洲娇小性xxxx色| 亚洲色成人WWW永久在线观看| 亚洲成a人无码亚洲成www牛牛| 国产天堂亚洲国产碰碰| 亚洲精品尤物yw在线影院| 亚洲色自偷自拍另类小说| 久久久久久a亚洲欧洲AV| 亚洲精品日韩中文字幕久久久| 亚洲香蕉在线观看| 亚洲AV成人一区二区三区观看 | 国产成人不卡亚洲精品91| 国产成人高清亚洲| 亚洲av无码国产精品夜色午夜|