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简化了很多操作,效率上基本无差。

目录
相关文章
|
17天前
|
存储
`map()`方法在什么场景下会比 `forEach()`方法更高效?
综上所述,当需要对数组元素进行复杂的转换并生成新数组、进行链式调用和函数式编程、处理元素之间存在明确映射关系的情况以及与其他数组方法结合使用时,`map()`方法比`forEach()`方法更高效,能够使代码更加简洁、清晰和易于维护。
53 32
|
4天前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
14 1
|
17天前
|
存储 JavaScript 前端开发
如何选择使用`map()`方法和`forEach()`方法?
选择使用`map()`方法还是`forEach()`方法主要取决于操作的目的、是否需要返回值、代码的可读性和维护性等因素。在实际开发中,需要根据具体的业务需求和场景来灵活选择合适的方法,以实现更高效、更易读和更易维护的代码。
21 3
|
22天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
76 4
|
23天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
26天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
72 2
|
27天前
|
存储 Java API
Java交换map的key和value值
通过本文介绍的几种方法,可以在Java中实现Map键值对的交换。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。对于简单的键值对交换,可以使用简单遍历法或Java 8的Stream API;对于需要处理值不唯一的情况,可以使用集合存储或Guava的Multimap。希望本文对您理解和实现Java中的Map键值对交换有所帮助。
30 1
|
28天前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。
|
Java
JAVA方法的定义
JAVA方法的定义
89 0
|
6月前
|
安全 Java 编译器
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
43 1