public static void testMap1(Map<Integer,Integer> map){long sum =0;
for (Map.Entry<Integer,Integer> entry : map.entrySet()){
sum += entry.getKey()+ entry.getValue();}
System.out.println(sum);}
1.
2.
3.
4.
5.
6.
7.
看过 HashMap 源码的同学应该会发现,这个遍历方式在源码中也有使用,如下图所示,
putMapEntries 方法在我们调用 putAll 方法的时候会用到。
2、通过 for, Iterator 和 map.entrySet() 来遍历
我们第一个方法是直接通过 for 和 entrySet() 来遍历的,这次我们使用 entrySet() 的迭代器来遍历,代码如下。
public static void testMap2(Map<Integer,Integer> map){long sum =0;
for (Iterator<Map.Entry<Integer,Integer>> entries = map.entrySet().iterator(); entries.hasNext();){
Map.Entry<Integer,Integer> entry = entries.next();
sum += entry.getKey()+ entry.getValue();}
System.out.println(sum);}
1.
2.
3.
4.
5.
6.
7.
8.
3、通过 while,Iterator 和 map.entrySet() 来遍历
上面的迭代器是使用 for 来遍历,那我们自然可以想到还可以用 while 来进行遍历,所以代码如下所示。
public static void testMap3(Map<Integer,Integer> map){
Iterator<Map.Entry<Integer,Integer>> it = map.entrySet().iterator();long sum =0;
while (it.hasNext()){
Map.Entry<Integer,Integer> entry = it.next();
sum += entry.getKey()+ entry.getValue();}
System.out.println(sum);}
1.
2.
3.
4.
5.
6.
7.
8.
9.
这种方法跟上面的方法类似,只不过循环从 for 换成了 while,日常我们在开发的时候,很多场景都可以将 for 和 while 进行替换。2 和 3 都使用迭代器 Iterator,通过迭代器的 next(),方法来获取下一个对象,依次判断是否有 next。
public static void testMap4(Map<Integer,Integer> map){long sum =0;
for (Integer key : map.keySet()){
sum += key + map.get(key);}
System.out.println(sum);}
1.
2.
3.
4.
5.
6.
7.
5、通过 for,Iterator 和 map.keySet() 来遍历
public static void testMap5(Map<Integer,Integer> map){long sum =0;
for (Iterator<Integer> key = map.keySet().iterator(); key.hasNext();){Integer k = key.next();
sum += k + map.get(k);}
System.out.println(sum);}
1.
2.
3.
4.
5.
6.
7.
8.
6、通过 while,Iterator 和 map.keySet() 来遍历
public static void testMap6(Map<Integer,Integer> map){
Iterator<Integer> it = map.keySet().iterator();long sum =0;
while (it.hasNext()){Integer key = it.next();
sum += key + map.get(key);}
System.out.println(sum);}
1.
2.
3.
4.
5.
6.
7.
8.
9.
我们可以看到这种方式相对于 map.entrySet() 方式,多了一步 get 的操作,这种场景比较适合我们只需要 key 的场景,如果也需要使用 value 的场景不建议使用 map.keySet() 来进行遍历,因为会多一步 map.get() 的操作。