Java技巧篇:Map遍历 key-value 的N种方法

简介: Map遍历 key-value 的N种方法

Map结构,在Java应用开发中,经常会用到,那么,Map的遍历方式有那些呢,本文来做个总结。

一、Map介绍

Map是java中的接口,Map.Entry是Map的一个内部接口。Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的Set集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。
image.png

二、遍历的方法

通过查看Map的API,可以看到Map中,提供多种遍历的方式

  • 先用keySet()取出所有key值,再取出对应value——增强for循环遍历
  • 先用keySet()取出所有key值,再取出对应value——使用迭代器遍历
  • 通过entrySet来获取key-value——增强for循环遍历
  • 通过entrySet来获取key-value——使用迭代器遍历
  • 通过ForEach来遍历

三、举例说明

1、 构造一个Map结构

首先,先来构造一个Map结构,并在Map中存放如下的数据作为测试

Map<String, Object> maps = new HashMap<>();
maps.put("001", "张三");
maps.put("002", "李四");
maps.put("003", "王五");
maps.put("004", "大白");
maps.put("005", "Jack");
maps.put("006", "Tom");

2、 方法一:使用keySet()取出所有key值,加上for循环

2.1 代码
Set keyset = maps.keySet();
for(Object key : keyset){
   
   
    log.info("key = {}, value = {}", key, maps.get(key));}
2.2 运行结果
18:04:25.481 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 001, value = 张三
18:04:25.500 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 002, value = 李四
18:04:25.500 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 003, value = 王五
18:04:25.500 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 004, value = 大白
18:04:25.500 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 005, value = Jack
18:04:25.500 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 006, value = Tom

3、 方法二:使用keySet()取出所有key值,加上Iterator循环

3.1 代码
Set<String> keySet = maps.keySet();
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()){
   
   
    String key = iterator.next();
    log.info("key = {}, value = {}", key, maps.get(key));
}
3.2 运行结果
18:04:25.500 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 001, value = 张三
18:04:25.500 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 002, value = 李四
18:04:25.500 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 003, value = 王五
18:04:25.500 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 004, value = 大白
18:04:25.500 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 005, value = Jack
18:04:25.500 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 006, value = Tom

4、 方法三:通过entrySet()获得key-value值——增强for循环遍历

4.1 代码
Set set = maps.entrySet();

for(Object key : set){
   
   
    Map.Entry entry = (Map.Entry) key;
    log.info("key = {}, value = {}", entry.getKey(), entry.getValue());
}
4.2 运行结果
18:09:44.849 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 001, value = 张三
18:09:44.850 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 002, value = 李四
18:09:44.850 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 003, value = 王五
18:09:44.850 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 004, value = 大白
18:09:44.850 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 005, value = Jack
18:09:44.850 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 006, value = Tom

5、 方法四:通过entrySet()获得key-value值——使用迭代器遍历

5.1 代码
Set entrySet = hashMap.entrySet();

Iterator iterator1 = entrySet.iterator();while(iterator1.hasNext()){
   
   
    Object itset = iterator1.next();
    Map.Entry entry = (Map.Entry) itset;
  log.info("key = {}, value = {}", entry.getKey(), entry.getValue());}
5.2 运行结果
18:09:44.849 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 001, value = 张三
18:09:44.850 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 002, value = 李四
18:09:44.850 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 003, value = 王五
18:09:44.850 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 004, value = 大白
18:09:44.850 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 005, value = Jack
18:09:44.850 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 006, value = Tom

6、 方法四:通过foreach来遍历

6.1 代码
maps.forEach((k, v) ->{
   
   
    log.info("key = {}, value = {}", k, v);
});
6.2 运行结果
18:15:47.529 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 001, value = 张三
18:15:47.529 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 002, value = 李四
18:15:47.529 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 003, value = 王五
18:15:47.530 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 004, value = 大白
18:15:47.530 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 005, value = Jack
18:15:47.530 [main] INFO net.jhelp.easyql.demo.tests.MapTest - key = 006, value = Tom

以上是基础的Map遍历方法,Java8简化了很多操作,效率上基本无差。

目录
相关文章
|
18天前
|
Go
go语言中遍历映射(map)
go语言中遍历映射(map)
37 8
|
17天前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
23天前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
58 9
|
10天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
24 12
|
14天前
|
存储 Go
go语言 遍历映射(map)
go语言 遍历映射(map)
26 2
|
16天前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
29 4
|
16天前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
21 4
|
13天前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
20 1
|
2月前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
32 1
|
4月前
|
安全 Java
【Java集合类面试三】、Map接口有哪些实现类?
这篇文章介绍了Java中Map接口的几种常用实现类:HashMap、LinkedHashMap、TreeMap和ConcurrentHashMap,以及它们适用的不同场景和线程安全性。