1、使用entrySet
可以遍历键和值
1 Mapmap = new HashMap ();2 3 for (Map.Entry entry : map.entrySet) {4 5 entry.getKey();6 7 entry.getValue();8 9 }
2、使用keySet, 获取键或者值
1 Mapmap = new HashMap<>();2 for (Integer key: map.keySet()) {3 System.out.println("key = " + key);4 }5 for (Boolean value: map.values()) {6 System.out.println("value = " + value);7 }
entrySet遍历在性能上稍好(快了10%)
3、使用Iterator遍历
1 Mapmap = new HashMap<>();2 Iterator > iterator = map.entrySet().iterator();3 while (iterator.hasNext()) {4 Map.Entry entry = iterator.next();5 System.out.println("key = " + entry.getKey() + "value = " + entry.getValue());6 }
在老版本java中这是惟一遍历map的方式。另一个好处是,你可以在遍历时调用iterator.remove()来删除entries,另两个方法则不能。
4、通过键值对遍历(效率低)
1 Mapmap = new HashMap (); 2 3 for (Integer key : map.keySet()) { 4 5 Integer value = map.get(key); 6 7 System.out.println("Key = " + key + ", Value = " + value); 8 9 }
这个代码看上去更加干净;但实际上它相当慢且无效率。因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)
总结:如果仅需要键(keys)或值(values)使用方法二。如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。否则使用方法一(键值都要)。