Java遍历Map的2种方法(附带实例)
在 Java 程序种使用集合的时候,遍历集合元素是十分常用的操作。
对 Map 集合而言,程序中经常需要取出 Map中所有的键和值进行特定处理,那么如何遍历 Map 中所有的键值对呢?Map 集合遍历和 Collection 单列集合遍历的方式基本类似,主要有两种方式可以实现:
接下来,以 HashMap 集合为例来分别对这两种集合遍历方式进行详细讲解。
其中,keySet() 方法会返回由 Map 集合中所有键组成的 Set 集合,接着通过 Set 集合获取对应的 Iterator 对象,然后遍历 Map 集合中所有的键,再根据键获取相应的值。
接下来,通过案例来演示先遍历键,再根据键获取相应值,以此来遍历 Map 集合:
Iterator 迭代器遍历 Map 集合的另外一种方式是调用 Map 的 entrySet() 方法,该方法将 Map 集合中的每个键值对作为一个整体,组成 Set 集合并返回,接着将键值对的 Set 集合转换为 Iterator 对象,然后迭代获取集合中的每个键值对对象,再从对象中取出键和值。
接下来,修改实例 1 中的代码,通过使用 entrySet() 方法来进行 Map 集合遍历:
接下来,通过案例来演示如何使用 forEach(BiConsumer action) 方法遍历 Map 集合:
对于 Map 集合,除了以上两种主要的遍历方式外,还提供了一个 values() 方法,通过这个方法可以获取 Map 中所有值组成的 Collection 集合。
接下来,通过案例来演示 values() 方法的使用:
对 Map 集合而言,程序中经常需要取出 Map中所有的键和值进行特定处理,那么如何遍历 Map 中所有的键值对呢?Map 集合遍历和 Collection 单列集合遍历的方式基本类似,主要有两种方式可以实现:
- 第 1 种方式是使用 Iterator 迭代器遍历集合;
- 第 2 种方式就是使用 JDK 8 提供的 forEach(Consumer action) 方法遍历集合。
接下来,以 HashMap 集合为例来分别对这两种集合遍历方式进行详细讲解。
Java Iterator迭代器遍历Map集合
使用 Iterator 迭代器遍历 Map 集合,有两种遍历方式:遍历键的集合和遍历键值对集合。这两种方式需要调用 Map 对应的两个方法,即 keySet() 和 entrySet()。其中,keySet() 方法会返回由 Map 集合中所有键组成的 Set 集合,接着通过 Set 集合获取对应的 Iterator 对象,然后遍历 Map 集合中所有的键,再根据键获取相应的值。
接下来,通过案例来演示先遍历键,再根据键获取相应值,以此来遍历 Map 集合:
import java.util.*; public class Demo { public static void main(String[] args) { Map map = new HashMap(); // 创建Map集合 map.put("car1", "兰博基尼"); map.put("car2", "劳斯莱斯"); map.put("car3", "布加迪"); System.out.println(map); // 存储元素 Set keySet = map.keySet(); // 获取键的Set集合 Iterator it = keySet.iterator(); // 迭代键的集合 while (it.hasNext()) { Object key = it.next(); // 获取遍历到的键 Object value = map.get(key); // 获取键所对应的值 System.out.println(key + ":" + value); } } }程序的运行结果如下:
{car2=劳斯莱斯, car3=布加迪, car1=兰博基尼}
car2:劳斯莱斯
car3:布加迪
car1:兰博基尼
Iterator 迭代器遍历 Map 集合的另外一种方式是调用 Map 的 entrySet() 方法,该方法将 Map 集合中的每个键值对作为一个整体,组成 Set 集合并返回,接着将键值对的 Set 集合转换为 Iterator 对象,然后迭代获取集合中的每个键值对对象,再从对象中取出键和值。
接下来,修改实例 1 中的代码,通过使用 entrySet() 方法来进行 Map 集合遍历:
import java.util.*; public class Demo { public static void main(String[] args) { Map map = new HashMap(); // 创建Map集合 map.put("car1", "兰博基尼"); // 存储元素 map.put("car2", "劳斯莱斯"); map.put("car3", "布加迪"); System.out.println(map); Set entrySet = map.entrySet(); // 获取键值对的Set集合 Iterator it = entrySet.iterator(); // 获取Iterator对象 while (it.hasNext()) { // 获取集合中键值对对象,并转为Map.Entry类型 Map.Entry entry = (Map.Entry) (it.next()); Object key = entry.getKey(); // 获取Entry中的键 Object value = entry.getValue(); // 获取Entry中的值 System.out.println(key + ":" + value); } } }程序的运行结果如下:
{car2=劳斯莱斯, car3=布加迪, car1=兰博基尼}
car2:劳斯莱斯
car3:布加迪
car1:兰博基尼
JDK 8新方法遍历Map集合
与遍历 Collection 集合类似,在 JDK 8 中也根据 Lambda 表达式特性新增了一个 forEach(BiConsumer action) 方法,用于 Map 集合的遍历,该方法所需要的参数也是一个函数式接口,因此可以使用 Lambda 表达式的书写形式来进行集合遍历。接下来,通过案例来演示如何使用 forEach(BiConsumer action) 方法遍历 Map 集合:
import java.util.HashMap; import java.util.Map; public class Demo { public static void main(String[] args) { Map map = new HashMap(); // 创建Map集合 map.put("car1", "兰博基尼"); // 存储元素 map.put("car2", "劳斯莱斯"); map.put("car3", "布加迪"); System.out.println(map); map.forEach((key, value) -> System.out.println(key + ":" + value)); } }程序的运行结果下:
{car2=劳斯莱斯, car3=布加迪, car1=兰博基尼}
car2:劳斯莱斯
car3:布加迪
car1:兰博基尼
对于 Map 集合,除了以上两种主要的遍历方式外,还提供了一个 values() 方法,通过这个方法可以获取 Map 中所有值组成的 Collection 集合。
接下来,通过案例来演示 values() 方法的使用:
import java.util.*; public class Demo { public static void main(String[] args) { Map map = new HashMap(); // 创建Map集合 map.put("1", "Jack"); // 存储元素 map.put("2", "Rose"); map.put("3", "Lucy"); System.out.println(map); // 打印集合 Collection values = map.values(); // 获取Map集合中所有值的集合 // 遍历Map集合的所有值,用临时变量v存储遍历到的值,并打印 values.forEach(v -> System.out.println(v)); } }程序的运行结果如下:
{1=Jack, 2=Rose, 3=Lucy}
Jack
Rose
Lucy