天天看點

map四種周遊方式

準備資料

HashMap<String, String> map = new HashMap<String,String>();
map.put("1","test1");
map.put("2","test2");
map.put("3","test3");
           

周遊方式一:需要說明的是,該方法不是最優選擇,一般不推薦使用

System.out.println("通過map.keyset進行周遊key和value");
for (String key:map.keySet()){
	System.out.println("key= "+key+" and value= "+map.get(key));
}
           

周遊方式二:通過對map entrySet的周遊,也可以同時拿到key和value,一般情況下,性能上要優于keyset,這一種也是最常用的周遊方法,但Iterator也有其優勢:在用foreach周遊map時,如果改變其大小,會報錯,但如果隻是删除元素,可以使用Iterator的remove方法删除元素

System.out.println("通過Map.entrySet;")
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String>entry:entries){
	String value = entry.getValue();
	String key = entry.getKey();
	System.out.println("key="+key+"value="+value);
}
           

周遊方式三:對于上面的幾種foreach都可以用Iterator代替,其實foreach在java5中才被支援,foreach的寫法看起來更簡潔

System.out.println("通過iterator周遊所有的value,但是不能周遊key");
Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()){
	Map.Entry<String, String> next = iterator.next();
	System.out.println("key="+next.getKey()+"value="+next.getValue());
}
           

周遊方式四:

System.out.println("通過map.values()周遊所有的value,但是不能周遊key");
for (String v:map.values()){
	System.out.println("value="+v);
}
           

結論1:

一般來講使用entrySet的方式進行周遊是效率最高的,因為hashMap内部的存儲結構就是基于Entry的數組,在用這種方式進行周遊時,隻需要周遊一次即可。而使用其他方式的時間複雜度可以會提高,例如:keySet方式,每次都需要通過key值去計算對應的hash,然後再通過hash擷取對應的結果值,是以效率較低。

結論2:

如果隻是擷取key,或者value,推薦使用keySet或者values方式

如果同時需要key和value推薦使用entrySet

如果需要在周遊過程中删除元素推薦使用Iterator

如果需要在周遊過程中增加元素,可以建立一個臨時map存放新增的元素,等周遊完畢,再把臨時map放到原來的map中