Java集合框架迭代器Iterator實現(xiàn)原理解析
使用循環(huán)遍歷集合
普通for循環(huán)
for(int i=0;i<10;i++){}
增強for循環(huán)
for(String str:list){}
什么是迭代器Iterator
Iterator是Java中的一個接口,核心作用就是用來遍歷容器的元素,當容器實現(xiàn)了Iterator接口后,可以通過調用Iterator()方法獲取一個Iterator對象
為啥是調用容器里面的Iterator方法呢?
因為容器的實現(xiàn)有多種,不同的容器遍歷規(guī)則不一樣,比如:ArrayList、LinkedList、HashSet、TreeSet等,所以設計了Iterator接口,讓容器本身去實現(xiàn)這個接口,實現(xiàn)里面的方法,從而讓開發(fā)人員不用關心容器的遍歷機制,直接使用對應的方法即可
三個核心方法
- boolean hashNext():用于判斷Iterator內是否有下個元素,如果有則返回true,沒有則false
- Object next():返回Iterator的下一個元素,同時指針也會向后移動一位
- void remove():刪除指針的上一個元素(建議使用自己容器里的方法)
public static void testSet() { Set<String> set = new HashSet<>(); set.add("jack"); set.add("tom"); set.add("marry"); set.add("tony"); set.add("jack"); Iterator<String> iterator = set.iterator(); while (iterator.hasNext()) { String str = iterator.next(); System.out.println(str); } } public static void testList() { List<String> list = new ArrayList<>(); list.add("jack"); list.add("tom"); list.add("mary"); list.add("tim"); list.add("tony"); list.add("eric"); list.add("jack"); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String str = iterator.next(); System.out.println(str); } }
迭代器和for循環(huán)對比
- for循環(huán)適合順序訪問,或者通過下標進行訪問
- 迭代器適合鏈式結構
- 最終要看使用場景,性能會有輕微差別,但是可以忽略
注意事項
迭代出的對象是引用的拷貝,如果修改迭代中的元素,那么就是修改容器對象的本身??!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Java集合中的Iterator迭代器接口詳解
- 淺析Java迭代器Iterator和Iterable的區(qū)別
- Java中不得不知的Collection接口與Iterator迭代器
- Java中Iterator(迭代器)的用法詳解
- Java使用迭代器Iterator遍歷集合
- Java中Iterator迭代器的使用詳解
- Java如何使用Iterator迭代器刪除集合重復選項
- 如何實現(xiàn)java Iterator迭代器功能
- Java Iterator接口遍歷單列集合迭代器原理詳解
- Java使用Iterator迭代器遍歷集合數(shù)據(jù)的方法小結
- java集合中的迭代器Iterator和數(shù)組內置方法及常見的報錯解決方案
相關文章
IntelliJ IDEA修改內存大小,使得idea運行更流暢
今天小編就為大家分享一篇關于IntelliJ IDEA修改內存大小,使得idea運行更流暢的文章,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10Mybatis 動態(tài)sql if 判讀條件等于一個數(shù)字的案例
這篇文章主要介紹了Mybatis 動態(tài)sql if 判讀條件等于一個數(shù)字的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11FreeMarker如何調用Java靜態(tài)方法及靜態(tài)變量方法
這篇文章主要介紹了FreeMarker如何調用Java靜態(tài)方法及靜態(tài)變量方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12Java版數(shù)據(jù)結構插入數(shù)據(jù)時遇到的結點為空的問題詳解
這篇文章主要介紹了Java版數(shù)據(jù)結構插入數(shù)據(jù)時遇到的結點為空的問題及解決辦法,需要的朋友們可以學習下。2019-09-09Elasticsearch?Recovery索引分片分配詳解
這篇文章主要為大家介紹了關于Elasticsearch的Recovery索引分片分配詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>2022-04-04