Java核心技術【十九】Iterator與增強for循環

Java中的Iterator與增強for循環

在Java編程中,迭代是處理集合元素的一種常見操作。Java提供了多種迭代集合元素的方式,其中最常用的兩種是Iterator增強for循環(也稱為“for-each”循環)。本文將深入探討這兩種迭代方式的特性和用法,幫助讀者更好地理解和使用它們。

一、基本概念與用途

1. Iterator(迭代器):

  • Iterator是Java中的一個接口,它提供了一種通用的方法來訪問集合中的元素,而不需要知道集合的底層實現。
  • Iterator允許我們順序地訪問集合中的元素,同時提供了刪除當前元素的能力(通過**remove()**方法)。

2. 增強for循環(for-each循環):

  • 增強for循環是Java 5中引入的一種簡化的for循環語法,用于遍歷數組或實現了Iterable接口的集合。
  • 它的語法更簡潔,易于讀寫,特別適用于簡單的遍歷操作,但不支持在遍歷過程中修改集合結構(如添加或刪除元素)。

二、特性與差異

1. 迭代方式:

  • Iterator: 顯式地通過next() 方法逐個訪問元素,可以通過hasNext() 方法檢查是否還有更多元素。
  • 增強for循環:隱式地迭代集合中的每個元素,無需調用next() 或檢查是否有下一個元素。

2. 語法結構:

  • Iterator:
Iterator<ElementType> iterator = collection.iterator();  
while (iterator.hasNext()) {  ElementType element = iterator.next();  // 處理元素 
}
  • 增強for循環:
for (ElementType element : collection) {  // 處理元素  
}

3. 使用場景:

  • Iterator:
    • 當需要在迭代過程中可能刪除元素時。
    • 當需要更精細的控制迭代過程時。
  • 增強for循環:
    • 當只需要簡單地遍歷集合中的所有元素,而不需要修改集合結構時。

三、示例代碼

1. 使用Iterator

以下代碼主要演示了如何使用Iterator來遍歷和修改一個ArrayList。它首先創建了一個包含三個水果名稱的列表,然后使用Iterator遍歷該列表并刪除名為"Banana"的元素,最后打印出修改后的列表。

package java_core_19;import java.util.ArrayList;  
import java.util.Iterator;  
import java.util.List;  public class IteratorExample  {public static void main(String[] args) {  List<String> list = new ArrayList<>();  list.add("Apple");  list.add("Banana");  list.add("Cherry");  Iterator<String> iterator = list.iterator();  System.out.println("刪除Banana前:");  while (iterator.hasNext()) {  String fruit = iterator.next();  System.out.println(fruit);  if ("Banana".equals(fruit)) {  iterator.remove(); // 移除當前元素  }  }  System.out.println("刪除Banana后:");  for (String fruit : list) {  System.out.println(fruit);  }  }  
}

執行結果

刪除Banana:
Apple
Banana
Cherry
------------
刪除Banana:
Apple
Cherry

2. 使用增強for循環

注意:在增強for循環中不能刪除元素,否則會拋出ConcurrentModificationException

package java_core_19;import java.util.ArrayList;  
import java.util.List;  public class ForEachExample {  public static void main(String[] args) {  List<String> list = new ArrayList<>();  list.add("Apple");  list.add("Banana");  list.add("Cherry");  for (String fruit : list) {  System.out.println(fruit);  // 注意:在增強for循環中不能刪除元素,否則會拋出ConcurrentModificationException//list.remove(fruit);}  }  
}

四、實際應用與建議

  • 選擇適合的迭代方式:
    根據需求選擇合適的迭代方式。如果需要在迭代中修改集合,使用Iterator;如果只是簡單遍歷,則增強for循環更簡潔。
  • 注意線程安全:
    在多線程環境中,迭代操作可能會遇到并發修改異常。確保在迭代過程中集合的狀態不會被其他線程修改。
  • 性能考慮:
    對于大型集合,Iterator可能會比增強for循環稍微快一些,因為它直接操作集合的內部迭代器,而增強for循環在內部實際上也是使用Iterator,但增加了一層語法糖。

結束語

總的來說,Iterator增強for循環Java中兩種強大的迭代工具,各自適用于不同的場景。理解它們的差異和特性,可以幫助開發者更加高效地處理集合數據。

簡單動作,深刻聯結。在這技術海洋,我備好舟,等你揚帆。啟航吧!
🌟點擊【關注】,解鎖定期的技術驚喜,讓靈感與知識的源泉不斷涌動。
👍一個【點贊】,如同心照不宣的默契,是我們共同語言的閃亮印記。
📚【收藏】好文,搭建你的專屬智慧庫,讓每次回望都能照亮新知之路。
源碼地址:https://gitee.com/code-in-java/csdn-blog.git

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40634.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CLAM用于弱監督WSI分析

計算病理學&#xff08;computational pathology&#xff09;下的深度學習方法需要手動注釋大型 WSI 數據集&#xff0c;并且通常存在領域適應性和可解釋性較差的問題。作者報告了一種可解釋的弱監督深度學習方法&#xff0c;只需要WSI級標簽。將該方法命名為聚類約束注意力多實…

Perl 格式化輸出:提升代碼可讀性的技巧

引言 Perl 是一種功能強大的腳本語言&#xff0c;廣泛用于文本處理、系統管理、網絡編程等多個領域。在 Perl 編程中&#xff0c;代碼的格式化輸出不僅有助于提升代碼的可讀性&#xff0c;還能增強程序的用戶體驗。本文將詳細介紹如何在 Perl 中實現代碼的格式化輸出。 Perl …

【HarmonyOS4學習筆記】《HarmonyOS4+NEXT星河版入門到企業級實戰教程》課程學習筆記(二十一)

課程地址&#xff1a; 黑馬程序員HarmonyOS4NEXT星河版入門到企業級實戰教程&#xff0c;一套精通鴻蒙應用開發 &#xff08;本篇筆記對應課程第 31 節&#xff09; P31《30.數據持久化-關系型數據庫》 上一節中學習了使用用戶首選項的方式實現數據持久化&#xff0c;但用戶首…

微機原理 選擇題

D C MOV、PUSH、POP、XLAT&#xff08;查表&#xff09;、IN、OUT不影響標志位 D B D C D C D B 1. (單選題, 5分)8位無符號數(字節)表示的數值范圍是( ), 16位無符號數(字)表示的數值范圍是( )。 A. 0~128 0~32768B. 0~255 0~655…

為什么 npm run serve 正常,npm run build 就報錯:digital envelope routines::unsupported

這個錯誤通常與 Node.js 版本和使用的加密算法有關。讓我解釋一下原因和可能的解決方案&#xff1a; 錯誤原因 這個錯誤&#xff08;“error:0308010C:digital envelope routines::unsupported”&#xff09;通常發生在以下情況&#xff1a; 使用較新版本的 Node.js&#xf…

Vscode快捷鍵崩潰

Vscode快捷鍵崩潰 Linux虛擬機下使用vscode寫代碼【ctrlA&#xff0c;CtrlC&#xff0c;CtrlV】等快捷鍵都不能使用&#xff0c;還會出現“NO text insert“等抽象的指令&#xff0c;問題就是不知道什么時候裝了一個VIM插件&#xff0c;讓他滾出電腦》》》

監聽 web 容器內的網絡請求(錯誤的方案)

需求 iOS 項目中 wkwebview 實現的 web 容器&#xff0c;需要監聽 web 容器內的所有網絡請求 實現 在 iOS 項目中使用 WKWebView 實現的 Web 容器&#xff0c;監聽 Web 容器內的網絡請求是一個常見需求。可以通過實現 WKURLSchemeHandler 協議來處理自定義的 URL scheme&#…

通過 API 接口管理 Kafka

文章目錄 前言Topic 管理配置管理消費者群組管理查看消費者群組修改消費者群組 為主題添加分區從主題中刪除消息首領選舉 前言 除了通過命令行和可視化界面對 kafka 進行管理&#xff0c;也可以通過 AdminClient的 API 對 kafka 進行管理。本文將介紹如何通過 AdminClient 進行…

[Vue學習]生命周期及其各階段舉例

當我們運行vue項目&#xff0c;看到了屏幕上顯示的界面&#xff0c;看到了界面上顯示的數據和標簽&#xff0c;之后將這個界面叉掉&#xff0c;這一過程其實經歷了一整個vue的生命周期的四個階段&#xff0c;即創建階段、掛載階段、更新階段以及銷毀階段, 而對于每個階段的啟動…

使用 pyecharts 渲染成圖片程序報錯: echarts is not defined問題處理

背景 之前寫的使用 snapshot_selenium 來保存pyeacharts渲染成的網頁截圖&#xff0c;可以正常運行。程序擱置了半年&#xff0c;不知道動了電腦哪里&#xff0c;再次運行程序時&#xff0c;程序開始報錯&#xff1a;JavascriptException: javascript error: echarts is not d…

【SQL】已解決:SQL分組去重并合并相同數據

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例五、注意事項 已解決&#xff1a;SQL分組去重并合并相同數據 在數據庫操作中&#xff0c;數據的分組、去重以及合并是常見需求。然而&#xff0c;初學者在編寫SQL語句時&#xff0c;可能會遇到一…

正弦波與單位圓關系的可視化 包括源碼

正弦波與單位圓關系的可視化 包括源碼 flyfish 正弦波與單位圓的關系 正弦波可以通過單位圓上的點在直線&#xff08;通常是 y 軸&#xff09;上的投影來表示。具體來說&#xff0c;考慮一個單位圓&#xff0c;其半徑為 1&#xff0c;圓心在原點。我們可以通過旋轉一個角度 …

每日一道算法題 判斷子序列

題目 判斷子序列_牛客題霸_牛客網 (nowcoder.com) Python # # 代碼中的類名、方法名、參數名已經指定&#xff0c;請勿修改&#xff0c;直接返回方法規定的值即可 # # # param S string字符串 # param T string字符串 # return bool布爾型 # class Solution:def isSubseq…

【全網最全流程+所有代碼】企業微信回調聯調,開通企微回調和收到企微回調

流程圖: 只是這里的消息回調,僅作為提示,群內有消息了。不是具體的消息,而是類似這樣的結構,: 如果需要獲取消息,還需要拉取企微群內消息方法,這個后續再更新。 好了,我們開始吧。 開啟消息回調和接收消息回調,地址是一樣的,只是 開啟消息回調,get請求, 接受消…

人工智能在日常生活中的十大應用:從醫療到智能家居

人工智能已成為當今人類日常生活的重要組成部分&#xff0c;無論您是否意識到&#xff0c;它幾乎在所有場景中都能提供幫助。每次您進行網絡搜索、在線預訂旅行、接收來自京東等購物平臺的產品推薦又或是打開您的新浪、抖音時&#xff0c;都能看到影子&#xff0c;這些只是一些…

代碼隨想錄算法訓練營第51天 [115.不同的子序列 583. 兩個字符串的刪除操作 72. 編輯距離 ]

代碼隨想錄算法訓練營第51天 [115.不同的子序列 583. 兩個字符串的刪除操作 72. 編輯距離 ] 一、115.不同的子序列 鏈接: 代碼隨想錄. 思路&#xff1a;dp[i][j] 以t[j-1]為結尾的字符串在 以s[i-1]為結尾的字 符串出現個數 相等的時候 dp[i][j] dp[i - 1][j - 1] dp[i - 1][…

JAVA案例模擬電影信息系統

一案例要求&#xff1a; 二具體代碼(需要在同一個包下創建三個類) Ⅰ&#xff1a;實現類 package 重修;import java.util.Random; import java.util.Scanner;public class first {public static void main(String[] args) {javabean[]moviesnew javabean[4];movies[0] new ja…

加密與安全_ Jasypt (Java Simplified Encryption)不完全指北

文章目錄 官網功能概述Code附 官網 http://www.jasypt.org/ 功能概述 Jasypt 是一個 Java 庫&#xff0c;它允許開發人員以最小的努力添加基本的加密功能&#xff0c;并且不需要深入了解密碼學的工作原理。 高安全性、基于標準的加密技術&#xff0c;適用于單向和雙向加密。…

AIGC對設計師積極性的影響

隨著科技的迅猛發展&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;工具正逐漸深入設計的每個角落&#xff0c;對設計師的工作方式和思維模式產生了深遠的影響。AIGC不僅極大提升了設計師的工作效率&#xff0c;更激發了他們的創新思維&#xff0c;為設計行業帶來了翻…

Spring Boot在java領域中有哪些優勢

哈嘍&#xff0c;大家好呀&#xff0c;淼淼又來和大家見面啦&#xff0c;隨著云計算、微服務架構的興起&#xff0c;Java開發領域迫切需要一套高效、靈活且易于上手的框架來應對日益復雜的業務需求。正是在這樣的背景下&#xff0c;Spring Boot應運而生&#xff0c;以其獨特的魅…