准备工作
构建一个Map
//创建map及数据
Map<String, Object> map = new HashMap<>();
map.put("name", "张三");
map.put("age", 20);
map.put("sex", "男");
方式1
通过Map.keySet()进行遍历,可以直接遍历,也可以通过迭代器【效率低,工作中不推荐】进行遍历
1、直接遍历
for (String key : map.keySet()) {
System.out.println("key = " + key + ", value = " + map.get(key));
}
2、通过.迭代器:iterator()进行遍历
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
Object value = map.get(key);
System.out.println("key:----"+key+"---value:---"+value);
}
方式2
通过Map.entrySet()进行遍历
1、直接遍历
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
}
2、通过.迭代器:iterator()进行遍历
Iterator<Map.Entry<String, Object>> iterator2 = map.entrySet().iterator();
while (iterator2.hasNext()) {
Map.Entry<String, Object> entry = iterator2.next();
System.out.println(entry);
}
方式3
JDK8及以上,通过 lambda 表达式 forEach 遍历
map.forEach((k, v) -> System.out.println("key = " + k + ", value = " + v));
总结
一般开发的JDK都是在8及以上的,推荐直接使用方式3(lambda 表达式),方式3是Map.entrySet()的一种封装,性能与Map.entrySet()一致
Map.entrySet()与Map.keySet()的区别:
keySet()获取的是一个无序的Set类型,存储Map中所有的key,我们在遍历map时,需要对该Set进行再次遍历,因此效率较低(遍历了2次)
entrySet()获取的是一个Map.Entry类型,该类型时Map中的静态内部类,直接存储着Map中的Key和Value,并可以通过内部类中的getKey()和getValue()方法,直接获取key和value,entrySet()只进行了一次遍历,因此效率比keySet()高