Java集合之Iterator迭代器實現(xiàn)代碼解析
一、什么是Iterator
??Iterator??(迭代器)是 Java 集合框架中用于遍歷集合元素的接口,它是一個"指針"或"游標",用于逐個訪問集合中的元素,而無需關心集合的內部結構。
二、Iterator的核心方法
| 方法 | 作用 | 使用頻率 |
|---|---|---|
boolean hasNext() | 判斷是否還有下一個元素 | 高 |
E next() | 返回下一個元素并移動指針 | 高 |
void remove() | 刪除當前元素(最近一次 next() 返回的元素) | 中 |
default void forEachRemaining(Consumer<? super E> action) | Java 8+,對剩余元素執(zhí)行操作 | 中 |
三、基本使用示例
遍歷 List
List<String> list = Arrays.asList("A", "B", "C");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}四、Iterator的工作原理
Iterator 內部維護一個指針(cursor),初始指向集合的第一個元素之前:
- 調用
hasNext()檢查是否還有元素 - 調用
next()返回當前元素并移動指針 - 遍歷結束時
hasNext()返回 false
五、使用注意事項
1、避免并發(fā)修改異常
// 錯誤做法:直接使用集合的remove方法
for (String s : list) {
if (s.equals("B")) {
list.remove(s); // 會拋出ConcurrentModificationException
}
}
// 正確做法:使用Iterator的remove方法
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
if ("B".equals(s)) {
iterator.remove(); // 安全刪除
}
}2、remove()必須在next()之后調用
必須先調用next()獲取元素,然后才能調用remove()刪除該元素。
3、一個next()對應一個remove()
不能連續(xù)調用兩次remove(),每次調用next()后只能調用一次remove()。
六、Iterator vs增強for循環(huán)
| 對比項 | Iterator | 增強 for 循環(huán) |
|---|---|---|
| 語法 | 手動寫 while 循環(huán) | for (T t : collection) |
| 刪除元素 | 支持(用 iterator.remove()) | 不支持(會拋異常) |
| 靈活性 | 高(可控制流程) | 低(只用于遍歷) |
| 底層實現(xiàn) | 直接使用 Iterator | 編譯后轉換為 Iterator |
??選擇建議??:只需遍歷時用增強 for,需要刪除元素時用 Iterator。
七、適用集合類型
Iterator 可用于所有實現(xiàn) Iterable 接口的集合:
- List(ArrayList, LinkedList)
- Set(HashSet, TreeSet)
- Queue
- Map 的
keySet()、values()、entrySet()
八、Java8+替代方案
1.forEach+Lambda
list.forEach(System.out::println);
2.Stream API
list.stream()
.filter(s -> !s.equals("B"))
.forEach(System.out::println);現(xiàn)代Java開發(fā)推薦使用這些更簡潔的函數(shù)式編程方式。
九、Iterator設計模式
Iterator是"迭代器模式"的經典實現(xiàn),其核心思想是將遍歷邏輯與集合分離,降低耦合度,讓用戶無需了解集合內部結構。
十、總結
| 關鍵點 | 說明 |
|---|---|
| ??作用?? | 遍歷集合元素 |
| ??核心方法?? | hasNext(), next(), remove() |
| ??刪除元素?? | 必須使用 iterator.remove() |
| ??并發(fā)修改?? | 直接調用集合的 remove/add 會拋異常 |
| ??增強 for 底層?? | 基于 Iterator 實現(xiàn) |
| ??現(xiàn)代替代?? | forEach(), Stream API |
??口訣??:"遍歷用 foreach,刪除用 iterator"
Iterator 是 Java 集合框架的基礎,理解其原理和正確使用方式對于Java開發(fā)者至關重要。
以上就是Java集合之Iterator迭代器實現(xiàn)代碼解析的詳細內容,更多關于Java Iterator迭代器的資料請關注腳本之家其它相關文章!
相關文章
Mybatis攔截器如何實現(xiàn)數(shù)據(jù)權限過濾
本文介紹了MyBatis攔截器的使用,通過實現(xiàn)Interceptor接口對SQL進行處理,實現(xiàn)數(shù)據(jù)權限過濾功能,通過在本地線程變量中存儲數(shù)據(jù)權限相關信息,并在攔截器的intercept方法中進行SQL增強處理2024-12-12
Java線程基本使用之如何實現(xiàn)Runnable接口
這篇文章主要介紹了Java線程基本使用之如何實現(xiàn)Runnable接口問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
Springboot文件上傳出現(xiàn)找不到指定系統(tǒng)路徑的解決
這篇文章主要介紹了Springboot文件上傳出現(xiàn)找不到指定系統(tǒng)路徑的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
Java文件處理之使用itextpdf實現(xiàn)excel轉pdf
在文件處理中,經常有文件類型轉換的使用場景,本文主要介紹了如何使用poi以及itextpdf完成excel轉pdf的操作,需要的小伙伴可以參考一下2024-02-02
從基礎到實戰(zhàn)詳解SpringBoot獲取資源文件全指南
在 SpringBoot 開發(fā)中,我們經常需要訪問各類資源文件,本文將系統(tǒng)講解 SpringBoot 中資源文件的存放規(guī)則,獲取方法及實戰(zhàn)技巧,需要的可以了解下2025-07-07
maven自動將源碼打包并發(fā)布的實現(xiàn)步驟
maven-source-plugin 提供項目自動將源碼打包并發(fā)布的功能,在需要發(fā)布源碼項目的 pom.xml 文件中添加即可,本文就來介紹一下如何設置,感興趣的可以了解一下2023-11-11
spring?boot教程之IDEA環(huán)境下的熱加載與熱部署
這篇文章主要介紹了spring?boot系列教程中的IDEA環(huán)境下的熱加載與熱部署的相關資料,需要的朋友可以參考下2022-09-09
Java多線程讀寫鎖ReentrantReadWriteLock類詳解
本文詳細講解了Java多線程讀寫鎖ReentrantReadWriteLock類,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-12-12

