map的四種遍歷方式

HD243608836發表於2018-05-05

map是java中非常常用的一種資料結構,但map不同於set和list都繼承自Collection介面。

所以map沒有實現Collection的Iterator 方法,自身沒有迭代器來遍歷元素。


構造一個map

[java] view plain copy
  1. Map<String, String> map = new HashMap<String, String>();    
  2. map.put("001""hello");    
  3. map.put("002""world");    
  4. map.put("003""main");    
想遍歷這個map,那map通常的遍歷方式有哪幾種呢?


這裡我們介紹常用的四種方式:keySet集合迭代entrySet集合迭代keySet 集合for-each 迴圈entrySet集合for-each迴圈


方法1 keySet集合迭代

[java] view plain copy
  1. // method1  
  2. Set<String> keySet = map.keySet();  
  3. Iterator<String> it = keySet.iterator();  
  4. while (it.hasNext()) {  
  5.     String key = it.next();  
  6.     System.out.println(key + "=" + map.get(key));  
  7. }  

方法2 entrySet集合迭代

[java] view plain copy
  1. // method2  
  2. Set<Map.Entry<String, String>> entrySet = map.entrySet();  
  3. Iterator<Map.Entry<String, String>> meIt = entrySet.iterator();  
  4. while (meIt.hasNext()) {  
  5.     Entry<String, String> entry = meIt.next();  
  6.     System.out.println(entry.getKey() + "=" + entry.getValue());  
  7. }  

方法3 keySet集合for-each迴圈

[java] view plain copy
  1. // method3  
  2. for (String key : map.keySet()) {  
  3.     System.out.println(key + "=" + map.get(key));  
  4. }  

方法4 entrySet集合for-each迴圈

[java] view plain copy
  1. // method4  
  2. for (Map.Entry<String, String> entry : map.entrySet()) {  
  3.     System.out.println(entry.getKey() + "=" + entry.getValue());  
  4. }  


四種方式中,method1 和 method2 是通過迭代器來顯示完成的,method3 和 method4 是通過for-each來隱式的通過迭代器來完成的。

同時 method1 和 method3 是通過key的集合來完成的,method2 和 method4 是通過entry 的集合來完成的。

方法1 和方法2 的區別

一個是獲取keySet ,一個是獲取entrySet

推薦使用entrySet 的方式去獲取,檢視map通過key獲取value的方法

注意:大量資料時使用該entrySet方式效率更高

[java] view plain copy
  1. public V get(Object key) {  
  2.     if (key == null)  
  3.         return getForNullKey();  
  4.     Entry<K,V> entry = getEntry(key);  
  5.   
  6.     return null == entry ? null : entry.getValue();  
  7. }  
也是先獲取該key對應的entry,然後再獲取value值,所以,推薦使用entrySet 方法,再遍歷entry集合的方式來遍歷map

map 介面還有一個方法 values() ,由於僅能取到所有的value值,而取不到key值,所以在這裡就算不上遍歷map了,只能算上遍歷map的value值。


轉載自:https://blog.csdn.net/magi1201/article/details/41968495

相關文章