深入我们的编程世界:Map集合遍历

发布时间:2023-05-16

一、Map集合遍历赋值

Map<Integer, String> myMap = new HashMap<>();
myMap.put(1, "apple");
myMap.put(2, "banana");

Map集合是一种键值对的数据结构,可以用于存储键值对的映射关系,其中键是唯一的。在上面的代码示例中,我们首先用 put 方法往 myMap 中添加了两个键值对,1-apple 和 2-banana。

二、Map集合遍历的方式和单列

Map<Integer, String> myMap = new HashMap<>();
myMap.put(1, "apple");
myMap.put(2, "banana");
for(Map.Entry<Integer, String> entry : myMap.entrySet()){
    System.out.println("Key: "+ entry.getKey() +", Value: " + entry.getValue());
}

遍历一个 Map 集合的方式有多种,其中 entrySet 方法返回一个 Set 集合,其中存放的是 Map.Entry 对象,每个 Map.Entry 对象代表一个键值对。我们可以使用 for 循环和增强型 for 循环分别遍历出每个键值对的键和值。在上面的代码示例中,我们用增强型 for 循环遍历出了每个键值对,并输出了键和值。 与单列不同的是,Map 集合遍历需要注意每个键是唯一的,因此不能像单列一样直接使用下标索引。

三、Map集合遍历取值

Map<Integer, String> myMap = new HashMap<>();
myMap.put(1, "apple");
myMap.put(2, "banana");
String value1 = myMap.get(1);
String value2 = myMap.get(2);
System.out.println(value1);
System.out.println(value2);

Map 集合的 get 方法可以获取一个键对应的值,如上面的代码示例所示,我们用 get 方法分别获取了键 1 和键 2 所对应的值,即 apple 和 banana,并将它们输出。

四、Map集合遍历 key

Map<Integer, String> myMap = new HashMap<>();
myMap.put(1, "apple");
myMap.put(2, "banana");
Set<Integer> keySet = myMap.keySet();
for(Integer key : keySet){
    System.out.println("Key: "+ key +", Value: " + myMap.get(key));
}

除了通过 entrySet 方法获取全部的键值对外,我们也可以通过 keySet 方法获取到键的 Set 集合,然后通过 for 循环遍历 Set 集合中的每个键,并用 get 方法获取到对应的值。需要注意的是,在使用 get 方法时,我们需要传入键作为参数。

五、Map集合遍历的方式

上面介绍了两种常用的 Map 集合遍历方式,那么还有其他的遍历方式吗?答案是肯定的。 第一种方式是使用迭代器,如下所示:

Map<Integer, String> myMap = new HashMap<>();
myMap.put(1, "apple");
myMap.put(2, "banana");
Iterator<Map.Entry<Integer, String>> iter = myMap.entrySet().iterator();
while(iter.hasNext()){
    Map.Entry<Integer, String> entry = iter.next();
    System.out.println("Key: "+ entry.getKey() +", Value: " + entry.getValue());
}

这种方式的代码与 entrySet 方法遍历是比较类似的,都需要通过 Iterator 迭代器来实现。不同的是,使用 Iterator 迭代器需要显式地调用 next 方法,而增强型 for 循环是不需要显式调用的。 第二种方式是使用 lambda 表达式,如下所示:

Map<Integer, String> myMap = new HashMap<>();
myMap.put(1, "apple");
myMap.put(2, "banana");
myMap.forEach((key, value) ->
    System.out.println("Key: " + key + ", Value: " + value));

这种方式使用了 forEach 方法,其参数是一个 lambda 表达式,可以用来遍历 Map 集合中的每个键值对。需要注意的是,如果要在 lambda 表达式内部调用多条语句,则需要用 {} 将这些语句包裹起来。

六、Map集合遍历方式优缺点

上面介绍了多种方式来遍历 Map 集合,那么它们各自有什么优缺点呢?

  • entrySet 方法遍历优点在于,可以同时获取键和值,而且操作简单直观。缺点是需要新建一个 Set 集合,占用一定内存。
  • keySet 方法遍历优点在于,遍历方便,不需要使用 Map.Entry 对象。缺点是需要通过键来获取值,效率会略低。
  • 使用迭代器遍历的优点是,随机访问性能好,能够快速定位到某个位置进行操作。缺点是代码相对比较繁琐。
  • lambda 表达式遍历的优点在于,写法简单、直观。缺点是有些开发者可能不太习惯使用 lambda 表达式。

七、Map集合遍历几种方式

以上介绍了四种常用的 Map 集合遍历方式,除此之外,还有一些其他的方式也可以用来遍历 Map 集合,例如使用 values 方法获取值的 Collection 集合,或者使用 forEachEntry 方法遍历等等。开发者可以根据具体需求来选择合适的遍历方式。

八、Map集合遍历替换 key 值

Map<Integer, String> myMap = new HashMap<>();
myMap.put(1, "apple");
myMap.put(2, "banana");
myMap.keySet().stream()
               .filter(key -> key == 1)
               .findAny()
               .ifPresent(key -> myMap.put(key, "orange"));
System.out.println(myMap);

除了普通的遍历方式外,我们还可以使用 Stream API 进行 Map 集合的遍历,并对其中的键或值进行替换。上述代码中,通过 filter 方法筛选出键为 1 的键值对,并通过 forEach 方法将其键的值替换为 orange。 本文介绍了多种 Map 集合遍历的方式,包括 entrySetkeySet、迭代器、lambda 表达式等等。每种方式都有各自的优缺点,开发者可以根据自身需求选择合适的方式进行遍历。希望本文对读者有所帮助!