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)于效率問題:
如果你使用HashMap
同時(shí)遍歷key和value時(shí),keySet與entrySet方法的性能差異取決于key的具體情況,如復(fù)雜度(復(fù)雜對象)、離散度、沖突率等。換言之,取決于HashMap查找value的開銷。entrySet一次性取出所有key和value的操作是有性能開銷的,當(dāng)這個(gè)損失小于HashMap查找value的開銷時(shí),entrySet的性能優(yōu)勢就會體現(xiàn)出來。例如上述對比測試中,當(dāng)key是最簡單的數(shù)值字符串時(shí),keySet可能反而會更高效,耗時(shí)比entrySet少10%??傮w來說還是推薦使用entrySet。因?yàn)楫?dāng)key很簡單時(shí),其性能或許會略低于keySet,但卻是可控的;而隨著key的復(fù)雜化,entrySet的優(yōu)勢將會明顯體現(xiàn)出來。當(dāng)然,我們可以根據(jù)實(shí)際情況進(jìn)行選擇
只遍歷key時(shí),keySet方法更為合適,因?yàn)閑ntrySet將無用的value也給取出來了,浪費(fèi)了性能和空間。在上述測試結(jié)果中,keySet比entrySet方法耗時(shí)少23%。
只遍歷value時(shí),使用vlaues方法是最佳選擇,entrySet會略好于keySet方法。
如果你使用TreeMap
同時(shí)遍歷key和value時(shí),與HashMap不同,entrySet的性能遠(yuǎn)遠(yuǎn)高于keySet。這是由TreeMap的查詢效率決定的,也就是說,TreeMap查找value的開銷較大,明顯高于entrySet一次性取出所有key和value的開銷。因此,遍歷TreeMap時(shí)強(qiáng)烈推薦使用entrySet方法。
相關(guān)文章
IntelliJ?IDEA2022.3?springboot?熱部署含靜態(tài)文件(最新推薦)
這篇文章主要介紹了IntelliJ?IDEA2022.3?springboot?熱部署含靜態(tài)文件,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01java實(shí)現(xiàn)模擬進(jìn)度計(jì)量器
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)模擬進(jìn)度計(jì)量器,模擬血壓計(jì)實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07SpringBoot定義過濾器、監(jiān)聽器、攔截器的方法
本篇文章主要介紹了SpringBoot定義過濾器、監(jiān)聽器、攔截器的方法,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04java讀取excel圖片導(dǎo)入代碼示例(親測有效)
在日常工作中,我們經(jīng)常要將一些照片插入到Excel表格中,這篇文章主要給大家介紹了關(guān)于java讀取excel圖片導(dǎo)入的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10