Java集合之Iterator迭代器實現(xiàn)代碼解析
一、什么是Iterator
??Iterator??(迭代器)是 Java 集合框架中用于遍歷集合元素的接口,它是一個"指針"或"游標",用于逐個訪問集合中的元素,而無需關(guān)心集合的內(nèi)部結(jié)構(gòu)。
二、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 內(nèi)部維護一個指針(cursor),初始指向集合的第一個元素之前:
- 調(diào)用
hasNext()檢查是否還有元素 - 調(diào)用
next()返回當前元素并移動指針 - 遍歷結(jié)束時
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()之后調(diào)用
必須先調(diào)用next()獲取元素,然后才能調(diào)用remove()刪除該元素。
3、一個next()對應(yīng)一個remove()
不能連續(xù)調(diào)用兩次remove(),每次調(diào)用next()后只能調(diào)用一次remove()。
六、Iterator vs增強for循環(huán)
| 對比項 | Iterator | 增強 for 循環(huán) |
|---|---|---|
| 語法 | 手動寫 while 循環(huán) | for (T t : collection) |
| 刪除元素 | 支持(用 iterator.remove()) | 不支持(會拋異常) |
| 靈活性 | 高(可控制流程) | 低(只用于遍歷) |
| 底層實現(xiàn) | 直接使用 Iterator | 編譯后轉(zhuǎn)換為 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設(shè)計模式
Iterator是"迭代器模式"的經(jīng)典實現(xiàn),其核心思想是將遍歷邏輯與集合分離,降低耦合度,讓用戶無需了解集合內(nèi)部結(jié)構(gòu)。
十、總結(jié)
| 關(guān)鍵點 | 說明 |
|---|---|
| ??作用?? | 遍歷集合元素 |
| ??核心方法?? | hasNext(), next(), remove() |
| ??刪除元素?? | 必須使用 iterator.remove() |
| ??并發(fā)修改?? | 直接調(diào)用集合的 remove/add 會拋異常 |
| ??增強 for 底層?? | 基于 Iterator 實現(xiàn) |
| ??現(xiàn)代替代?? | forEach(), Stream API |
??口訣??:"遍歷用 foreach,刪除用 iterator"
Iterator 是 Java 集合框架的基礎(chǔ),理解其原理和正確使用方式對于Java開發(fā)者至關(guān)重要。
以上就是Java集合之Iterator迭代器實現(xiàn)代碼解析的詳細內(nèi)容,更多關(guān)于Java Iterator迭代器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于SpringMVC中數(shù)據(jù)綁定@ModelAttribute注解的使用
這篇文章主要介紹了關(guān)于SpringMVC中數(shù)據(jù)綁定@ModelAttribute注解的使用,SpringMVC是一個基于Spring框架的Web框架,它提供了一種簡單、靈活的方式來開發(fā)Web應(yīng)用程序,在開發(fā)Web應(yīng)用程序時,我們需要將用戶提交的數(shù)據(jù)綁定到我們的Java對象上,需要的朋友可以參考下2023-07-07
SpringMvc響應(yīng)數(shù)據(jù)及結(jié)果視圖實現(xiàn)代碼
這篇文章主要介紹了SpringMvc響應(yīng)數(shù)據(jù)及結(jié)果視圖實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08
java網(wǎng)絡(luò)編程中向指定URL發(fā)送GET POST請求示例
這篇文章主要介紹了java向指定URL發(fā)送GET POST請求示例,學(xué)習(xí)JAVA網(wǎng)絡(luò)編程一定會用到的,大家參考使用吧2013-11-11

