使用迭代器Iterator遍歷Collection問題
使用迭代器Iterator遍歷Collection
實(shí)現(xiàn)LRU算法時(shí),發(fā)現(xiàn)使用java的LinkedHashMap時(shí)如果刪除隊(duì)頭元素(最長時(shí)間未訪問的元素),需要
coll.remove(coll.keySet().iterator().next());
因?yàn)镸ap中元素?zé)o序,根據(jù)key的hashCode()排序,而LinkedHashMap雖然有序,但是無法獲取隊(duì)頭和隊(duì)尾元素,所以只能采用迭代器模式。
java.utils包下定義的迭代器接口:Iterator。
Iterator對象稱為迭代器(設(shè)計(jì)模式的一種),主要用于遍歷 Collection 集合中的元素。
GOF給迭代器模式的定義為:提供一種方法訪問一個(gè)容器(container)對象中各個(gè)元素,而又不需暴露該對象的內(nèi)部細(xì)節(jié)。迭代器模式,就是為容器而生。
作用:遍歷集合Collectiton元素
如何獲取實(shí)例:coll.iterator()返回一個(gè)迭代器實(shí)例
遍歷的代碼實(shí)現(xiàn):
Iterator iterator = coll.iterator(); //hasNext():判斷是否還下一個(gè)元素 while(iterator.hasNext()){ //next():①指針下移 ②將下移以后集合位置上的元素返回 System.out.println(iterator.next()); }
圖示說明
獲取LinkedHashMap中的頭部元素(最早添加的元素):
- 時(shí)間復(fù)雜度O(1)
int headNode=map.keySet().iterator().next();
獲取LinkedHashMap中的末尾元素(最近添加的元素):
- 時(shí)間復(fù)雜度O(n)
LinkedHashMap<Integer, Integer> map = new LinkedHashMap<>(); map.put(2, 2); map.put(1, 1); Iterator<Integer> iterator = map.keySet().iterator(); int tail = 0; while (iterator.hasNext()) { tail = iterator.next(); } System.out.println(tail);//1
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Idea實(shí)現(xiàn)接口的方法上無法添加@Override注解的解決方案
文章介紹了在IDEA中實(shí)現(xiàn)接口方法時(shí)無法添加@Override注解的問題及其解決方法,主要步驟包括更改項(xiàng)目結(jié)構(gòu)中的Language level到支持該注解的版本,以及在pom.xml文件中指定maven-compiler-plugin的版本以解決自動(dòng)更新后的問題2025-02-02Spring Cloud Nacos配置修改不生效的解決方法詳解
Nacos作為一個(gè)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺,廣泛應(yīng)用于Java Spring Cloud項(xiàng)目中,然而,有時(shí)在修改Nacos配置后,這些更改并不會(huì)立即生效,下面我們來看看這樣如何解決吧2025-01-0110個(gè)經(jīng)典的Java main方法面試題
這篇文章主要為大家分享了10個(gè)經(jīng)典的Java main方法面試題,與其說是Java面試題,其實(shí)也是Java的一些最基礎(chǔ)知識問題,感興趣的小伙伴們可以參考一下2016-01-01java設(shè)計(jì)模式之組合模式(Composite)
這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之組合模式Composite,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01Spring Cloud Feign內(nèi)部實(shí)現(xiàn)代碼細(xì)節(jié)
Feign 的英文表意為“假裝,偽裝,變形”, 是一個(gè)http請求調(diào)用的輕量級框架,可以以Java接口注解的方式調(diào)用Http請求,而不用像Java中通過封裝HTTP請求報(bào)文的方式直接調(diào)用。接下來通過本文給大家分享Spring Cloud Feign內(nèi)部實(shí)現(xiàn)代碼細(xì)節(jié),感興趣的朋友一起看看吧2021-05-05