JAVA遍歷map的幾種實(shí)現(xiàn)方法代碼
public static void main(String args[]) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("a", "A");
map.put("b", "B");
map.put("c", "C");
// keySet遍歷
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
String value = (String) map.get(key);
System.out.println(value);
}
for (String key : map.keySet()) {
String value = (String) map.get(key);
System.out.println(value);
}
// entrySet遍歷
Iterator<Entry<String, Object>> iterator1 = map.entrySet().iterator();
while (iterator1.hasNext()) {
String value = (String) iterator1.next().getValue();
System.out.println(value);
}
for (Entry<String, Object> entry : map.entrySet()) {
String value = (String) entry.getValue();
System.out.println(value);
}
//
for (Object str : map.values()) {
System.out.println(str);
}
}
關(guān)于效率問(wèn)題:
如果你使用HashMap
同時(shí)遍歷key和value時(shí),keySet與entrySet方法的性能差異取決于key的具體情況,如復(fù)雜度(復(fù)雜對(duì)象)、離散度、沖突率等。換言之,取決于HashMap查找value的開(kāi)銷。entrySet一次性取出所有key和value的操作是有性能開(kāi)銷的,當(dāng)這個(gè)損失小于HashMap查找value的開(kāi)銷時(shí),entrySet的性能優(yōu)勢(shì)就會(huì)體現(xiàn)出來(lái)。例如上述對(duì)比測(cè)試中,當(dāng)key是最簡(jiǎn)單的數(shù)值字符串時(shí),keySet可能反而會(huì)更高效,耗時(shí)比entrySet少10%。總體來(lái)說(shuō)還是推薦使用entrySet。因?yàn)楫?dāng)key很簡(jiǎn)單時(shí),其性能或許會(huì)略低于keySet,但卻是可控的;而隨著key的復(fù)雜化,entrySet的優(yōu)勢(shì)將會(huì)明顯體現(xiàn)出來(lái)。當(dāng)然,我們可以根據(jù)實(shí)際情況進(jìn)行選擇
只遍歷key時(shí),keySet方法更為合適,因?yàn)閑ntrySet將無(wú)用的value也給取出來(lái)了,浪費(fèi)了性能和空間。在上述測(cè)試結(jié)果中,keySet比entrySet方法耗時(shí)少23%。
只遍歷value時(shí),使用vlaues方法是最佳選擇,entrySet會(huì)略好于keySet方法。
如果你使用TreeMap
同時(shí)遍歷key和value時(shí),與HashMap不同,entrySet的性能遠(yuǎn)遠(yuǎn)高于keySet。這是由TreeMap的查詢效率決定的,也就是說(shuō),TreeMap查找value的開(kāi)銷較大,明顯高于entrySet一次性取出所有key和value的開(kāi)銷。因此,遍歷TreeMap時(shí)強(qiáng)烈推薦使用entrySet方法。
相關(guān)文章
IntelliJ?IDEA2022.3?springboot?熱部署含靜態(tài)文件(最新推薦)
這篇文章主要介紹了IntelliJ?IDEA2022.3?springboot?熱部署含靜態(tài)文件,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01解決netty中spring對(duì)象注入失敗的問(wèn)題
這篇文章主要介紹了解決netty中spring對(duì)象注入失敗的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02java實(shí)現(xiàn)模擬進(jìn)度計(jì)量器
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)模擬進(jìn)度計(jì)量器,模擬血壓計(jì)實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07SpringBoot定義過(guò)濾器、監(jiān)聽(tīng)器、攔截器的方法
本篇文章主要介紹了SpringBoot定義過(guò)濾器、監(jiān)聽(tīng)器、攔截器的方法,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04java讀取excel圖片導(dǎo)入代碼示例(親測(cè)有效)
在日常工作中,我們經(jīng)常要將一些照片插入到Excel表格中,這篇文章主要給大家介紹了關(guān)于java讀取excel圖片導(dǎo)入的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10