java中的所有map都實現了Map介面,以下方法適用於任何map實現(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等)。 1 HashMap map = new HashMap(); 2 map.put(1, "jack"); 3 map.put(2,... ...
java中的所有map都實現了Map介面,以下方法適用於任何map實現(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等)。
1 HashMap<Integer, String> map = new HashMap<>(); 2 map.put(1, "jack"); 3 map.put(2, "tom"); 4 map.put(3, "jeffy");
方法一:在for-each迴圈中使用entries來遍歷
這是最常見的並且在大多數情況下也是最可取的遍歷方式。在鍵值都需要時使用。
1 for(Map.Entry<Integer, String> entry:map.entrySet()) {如果你遍歷的是一個空的map對象,for-each迴圈將拋出NullPointerException,因此在遍歷前你總是應該檢查是否為空引用。
2 System.out.println("key = "+entry.getKey()+",value = "+entry.getValue());
3 }
方法二:在for-each迴圈中遍歷keys或values
如果只需要map中的鍵或者值,你可以通過keySet或values來實現遍歷,而不是用entrySet。
1 for(Integer key:map.keySet()) {
2 System.out.println("key = "+key);
3 }
4 for(String value:map.values()) {
5 System.out.println("value = "+value);
6 }
該方法比entrySet遍歷在性能上稍好(快了10%),而且代碼更加乾凈。
方法三:使用Iterator遍歷
1 Iterator<Map.Entry<Integer, String>> irs = map.entrySet().iterator();
2 while(irs.hasNext()) {
3 Map.Entry<Integer, String> entry = irs.next();
4 System.out.println("key = "+entry.getKey()+",value = "+entry.getValue());
5 }
方法四: 通過鍵找值遍歷(效率低)
1 Map<Integer, String> map2 = map;
2 for(Integer key:map2.keySet()) {
3 String value = map2.get(key);
4 System.out.println("key = "+key+",value = "+value);
5 }
因為通過鍵取值是非常耗時的操作,所以這種方法相當慢且無效率的。
總結:
如果僅需要鍵(keys)或值(values)使用方法二。如果你使用的語言版本低於java 5,或是打算在遍歷時刪除entries,必須使用方法三。否則使用方法一(鍵值都要)。