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