Java中四種遍歷Map對象的方法

方法一:在for-each循環中使用entry來遍歷,經過Map.entrySet遍歷key和value,這是最多見的而且在大多數狀況下也是最可取的遍歷方式。在鍵值都須要時使用。java

Map<Integer,Integer> map = new HashMap<Integer,Integer>();        
for(Map.Entry<Integer,Integer> entry:map.entrySet()){    
  System.out.println("key="+entry.getKey()+",value = "+entry.getValue());    
}

注:Map.Entry方法解釋:Map.Entry是Map聲明的一個內部接口,此接口爲泛型,定義爲Entry<K,V>。它表示Map中的一個實體(一個key-value對) 數組

方法二:在for-each循環中遍歷keys或values,若是隻須要map中的鍵或者值,你能夠經過keySet或values來實現遍歷,而不是用entrySet。該方法比entrySet遍歷在性能上稍好(快了10%),並且代碼更加乾淨。性能

Map<Integer,Integer> map = new HashMap<Integer,Integer>();    
//遍歷map中的鍵  
for(Integer key:map.keySet()){  
  System.out.println("key="+key);
}  
//遍歷map中的值  
for(Integer value:map.values()){  
  System.out.println("value ="+value);
}

方法三:使用Iterator遍歷spa

Map<Integer,Integer> map = new HashMap<Integer,Integer>();  
Iterator<Map.Entry<Integer,Integer>> entries = map.entrySet().iterator();  
while(entries.hasNext()){
  Map.Entry<Integer,Integer> entry = entries.next();  
  System.out.println("key="+entry.getKey()+"value = "+entry.getValue());  
}

不使用泛型code

Map map = new HashMap();  
Iterator entries = map.entrySet().iterator();  
while(entries.hasNext()){  
  Map.Entry entry = (Map.Entry)entries.next();  
  Integer key = (Integer)entry.getKey();  
  Integer value = (Integer)entry.getValue();  
  System.out.println("key = "+key+",value = "+value);
}

你也能夠在keySet和values上應用一樣的方法。blog

該種方式看起來冗餘卻有其優勢所在。首先,在老版本java中這是唯一遍歷map的方式。另外一個好處是,你能夠在遍歷時調用iterator.remove()來刪除entries,另兩個方法則不能。根據javadoc的說明,若是在for-each遍歷中嘗試使用此方法,結果是不可預測的。接口

從性能方面看,該方法類同於for-each遍歷(即方法二)的性能。rem

方法四:經過鍵找值遍歷,這個代碼看上去更加乾淨;但實際上它至關慢且無效率。get

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Integer key : map.keySet()) {
  Integer value = map.get(key);
  System.out.println("Key = " + key + ", Value = " + value);

結論:hash

通常來說使用entrySet的方式進行遍歷是效率最高的,由於hashMap內部的存儲結構就是基於Entry的數組,在用這種方式進行遍歷時,只須要遍歷一次便可。而使用其餘方式的時間複雜度能夠會提升,例如:keySet方式,每次都須要經過key值去計算對應的hash,而後再經過hash獲取對應的結果值,所以效率較低。

相關文章
相關標籤/搜索