1、使用entrySet
可以遍历键和值
1 Map<Integet, Boolean> map = new HashMap<Integet, Boolean>(); 2 3 for (Map.Entry<Integet, Boolean> entry : map.entrySet) { 4 5 entry.getKey(); 6 7 entry.getValue(); 8 9 }
2、使用keySet, 获取键或者值
1 Map<Integer, Boolean> map = 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 Map<Integer, Boolean> map = new HashMap<>(); 2 Iterator<Map.Entry<Integer, Boolean>> iterator = map.entrySet().iterator(); 3 while (iterator.hasNext()) { 4 Map.Entry<Integer, Boolean> entry = iterator.next(); 5 System.out.println("key = " + entry.getKey() + "value = " + entry.getValue()); 6 }
在老版本java中这是惟一遍历map的方式。另一个好处是,你可以在遍历时调用iterator.remove()来删除entries,另两个方法则不能。
4、通过键值对遍历(效率低)
1 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 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,必须使用方法三。否则使用方法一(键值都要)。