Java中Map的5种遍历方式

在此总结一下Map的5种遍历方式:

    第一种方法,foreach map.keySet() 第二种方法,foreach map.values() 第三种方法,foreach map.entrySet() 第四种方法,map.entrySet().iterator() 第五种方法,map.forEach()

前两种方法分别foreach遍历Map的keySet()和values(),是最容易想出来的方法:

// 第一种方法,foreach keySet
for (Integer key : testMap.keySet()) {
          
   
    System.out.print(key + "-" + testMap.get(key) + "	");
}
// 第二种方法,foreach values
for (String value : testMap.values()) {
          
   
    System.out.print(value + "	");
}

第三、第四种方法使用到了Map的entrySet()进行遍历,本质是一样的(IDEA建议将第四种改为第三种):

// 第三种方法,foreach entrySet
for (Map.Entry<Integer, String> entry : testMap.entrySet()) {
          
   
    System.out.print(entry.getKey() + "-" + entry.getValue() + "	");
}
// 第四种方法,entrySet iterator
Iterator<Map.Entry<Integer, String>> it = testMap.entrySet().iterator();
while (it.hasNext()) {
          
   
    Map.Entry<Integer, String> entry = it.next();
    System.out.print(entry.getKey() + "-" + entry.getValue() + "	");
}

第五种则是Java8新出的一种遍历方式:

(值得注意的是,这种方法无法改变变量的值,会提示Variable used in lambda expression should be final or effectively final)

// 第五种方法,Map的forEach方法,Java8独有
testMap.forEach((key, value) -> {
          
   
    System.out.print(key + "-" + value + "	");
});

最后,所有的代码如下:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class MapTest {
          
   
    public static void main(String[] args) {
          
   
        HashMap<Integer, String> testMap = new HashMap<>();

        testMap.put(1, "One");
        testMap.put(2, "Two");
        testMap.put(3, "Three");
        testMap.put(4, "Four");
        testMap.put(5, "Five");

        // 第一种方法,foreach keySet
        for (Integer key : testMap.keySet()) {
          
   
            System.out.print(key + "-" + testMap.get(key) + "	");
        }
        System.out.println("
foreach keySet");

        // 第二种方法,foreach values
        for (String value : testMap.values()) {
          
   
            System.out.print(value + "	");
        }
        System.out.println("
foreach values");

        // 第三种方法,foreach entrySet
        for (Map.Entry<Integer, String> entry : testMap.entrySet()) {
          
   
            System.out.print(entry.getKey() + "-" + entry.getValue() + "	");
        }
        System.out.println("
foreach entrySet");

        // 第四种方法,entrySet iterator
        Iterator<Map.Entry<Integer, String>> it = testMap.entrySet().iterator();
        while (it.hasNext()) {
          
   
            Map.Entry<Integer, String> entry = it.next();
            System.out.print(entry.getKey() + "-" + entry.getValue() + "	");
        }
        System.out.println("
entrySet iterator");

        // 第五种方法,Map的forEach方法,Java8独有
        testMap.forEach((key, value) -> {
          
   
            System.out.print(key + "-" + value + "	");
        });
        System.out.println("
Map.forEach()");
    }
}

运行结果:

1-One 2-Two 3-Three 4-Four 5-Five foreach keySet One Two Three Four Five foreach values 1-One 2-Two 3-Three 4-Four 5-Five foreach entrySet 1-One 2-Two 3-Three 4-Four 5-Five entrySet iterator 1-One 2-Two 3-Three 4-Four 5-Five Map.forEach()
经验分享 程序员 微信小程序 职场和发展