map.put(1, “张三”);
map.put(2, “李四”);
map.put(3, “王五”);
map.put(4, “赵六”);
map.put(5, “小三”);
// 迭代器遍历
Set set = map.keySet(); // 获取key对应的Set集合
Iterator iterator = set.iterator(); // 通过迭代器遍历
while (iterator.hasNext()) {
Integer i = iterator.next();
// 输出key并通过key输出value
System.out.println(“key:” + i + " value:" + map.get(i));
}
System.out.println(“=================”);
// foreach循环
for (Integer i : map.keySet()) {
System.out.println(“key:” + i + " value:" + map.get(i));
}
System.out.println(“=================”);
}
}
输出如下:
key:1 value:张三
key:2 value:李四
key:3 value:王五
key:4 value:赵六
key:5 value:小三
=================
key:1 value:张三
key:2 value:李四
key:3 value:王五
key:4 value:赵六
key:5 value:小三
=============

====

这里我用了迭代器和foreach循环,至于它们的区别我会在文章最后详细介绍

接下来分析一下这种方法的效率;

我们通过 keySet() 方法获取到了所有的key值,并没有获取到value值,这意味着每次遍历时通过 get() 方法得到value值时都需要再次遍历Map集合,就相当于遍历了两次,第一次是对key的Set集合遍历,第二次是通过map.get(key)来获取value值;

一旦数据量大的时候,这种遍历方式的效率就会明显降低;

当然,如果数据量较小时还是比较推荐这种方法的;

同时获取key和Value


这种方法是同时获取到 key 和 value 值,这里就不再使用 keySet() 方法了,而是使用 entrySet() 获取Map中的key-value对;

这里还是简单介绍一下Map.Entry<K,V>接口

public static interface Map.Entry<K,V>

英语好的可以结合理解一下对Map.Entry<K,V>接口的介绍:

A map entry (key-value pair). The Map.entrySet method returns a collection-view of the map, whose elements are of this class. The only way to obtain a reference to a map entry is from the iterator of this collection-view. These Map.Entry objects are valid only for the duration of the iteration; more formally, the behavior of a map entry is undefined if the backing map has been modified after the entry was returned by the iterator, except through the setValue operation on the map entry.

其中这里我们只需要记住两种方法:

java Stream 流 map处理 集合获取另一个集合中工号一样的数据 java的map集合如何遍历_迭代器

就是分别获取到key值和value值;

下面我将用代码示范一下第二种遍历方式:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class MapTraverse02 {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>(); // 创建一个HashMap对象
// 存入map
map.put(1, “张三”);
map.put(2, “李四”);
map.put(3, “王五”);
map.put(4, “赵六”);
map.put(5, “小三”);
// 迭代器
Set<Map.Entry<Integer, String>> set = map.entrySet(); // 获取map中的key-value对
Iterator<Map.Entry<Integer, String>> iterator = set.iterator();
while (iterator.hasNext()) {
Map.Entry<Integer, String> i = iterator.next();
// 这里必须定义局部变量,如果直接用迭代器获取key后迭代器就会前移,输出下一个value时就会到达下一个迭代的位置
// System.out.println(“key:” + iterator2.next().getKey() + " value:" + iterator2.next().getValue());
// 上面这样不可以
// 通过Entry内部类获取key和value
System.out.println(“key:” + i.getKey() + " value:" + i.getValue());
}