行业资讯 2025年08月6日
0 收藏 0 点赞 920 浏览 2511 个字
摘要 :

文章目录 1.介绍 2.何时使用嵌套Map? 3.使用嵌套HashMap 3.1. 使用Map.put()创建嵌套Map 3.2. 使用流创建嵌套Map 3.3. 向嵌套Map添加元素 3.4. 从嵌套Map中删除元素 3……




  • 1.介绍
  • 2.何时使用嵌套Map?
  • 3.使用嵌套HashMap
    • 3.1. 使用Map.put()创建嵌套Map
    • 3.2. 使用流创建嵌套Map
    • 3.3. 向嵌套Map添加元素
    • 3.4. 从嵌套Map中删除元素
    • 3.5. 遍历嵌套HashMap
  • 4.结论

1.介绍

HashMap类扩展了AbstractMap类并实现了Map接口。它保存条目对象,即键-值对。键或值的类型为Object。

嵌套HashMap是Map内部的Map。HashMap和嵌套HashMap之间唯一的区别是:

  • 对于HashMap,键或值可以是任何类型(对象)。
  • 对于嵌套HashMap,键可以是任何类型(对象),但值只能是另一个HashMap对象。

请注意下面创建的嵌套HashMap;我们创建一个HashMap,它以’String’为键,以另一个’HashMap’作为值,这就是我们称之为嵌套HashMap的情况。

// 创建嵌套的HashMap
Map<String, HashMap<Integer, String>> nestedMap = new HashMap<>();

2.何时使用嵌套Map?

我们使用嵌套Map时,通常是因为我们需要嵌套对象,即一个对象内部包含其他对象。让我们以JSON数据结构为例,其中我们在其他对象内部有嵌套对象。

{
  \"Alex\": {
    \"Hideout\": \"UAE\",
    \"Permanent\": \"Florida\",
    \"Postal\": \"Canada\"
  },
  \"Brian\": {
    \"Hideout\": \"India\",
    \"Permanent\": \"Alaska\",
    \"Postal\": \"Canada\"
  }
}

嵌套Map在代码可读性上很难扩展,并且Java中的Map往往会消耗大量内存。将Map填充更多Map只会加重内存消耗问题。因此,在使用嵌套Map时需要谨慎,应该仅在实际需要的特殊情况下使用。

3.使用嵌套HashMap

要创建嵌套Map,首先必须创建一个普通的HashMap,只是这个Map的值将是另一个HashMap。

3.1. 使用Map.put()创建嵌套Map

我们可以使用Map接口的put()方法来向外部和内部HashMap中添加元素。

Map<String, Map<String, String>> employeeMap = new HashMap<>();
Map<String, String> addressMap = new HashMap<>();
addressMap.put(\"Permanent\", \"Florida\");
addressMap.put(\"Postal\", \"Canada\");
employeeMap.put(\"Alex\", addressMap);

3.2. 使用流创建嵌套Map

我们可以使用流API使用Collectors.toMap()方法创建嵌套Map。在以下示例中,我们创建了一个’学生’类,具有’studentId’和其他字段。

class Student
{
    private Integer studentId;
    private String studentName;
    private String course;
    // Getters & Setters
}

我们有一个学生对象的列表,从这个列表中,我们创建了一个嵌套Map,其中键为’studentId’,值为另一个以’studentName’为键和以’course’为值的Map。

// 创建嵌套Map
List<Student> studentList = List.of(
    new Student(1, \"A\", \"Course1\"),
    new Student(2, \"B\", \"Course2\"),
    new Student(3, \"C\", \"Course3\"));
Map<Integer, Map<String, String>> studentNestedMap =
    studentList.stream()
        .collect(Collectors.groupingBy(s -> s.getStudentId(),
            Collectors.toMap(Student::getStudentName, Student::getCourse)));

3.3. 向嵌套Map添加元素

我们可以通过首先从外部Map中检索内部Map,然后使用put()方法向内部Map添加新元素来向现有的嵌套Map中添加新元素。

Map<String, Map<String, String>> employeeMap = new HashMap<>();
//为Alex添加另一个地址
employeeMap.get(\"Alex\").put(\"Hideout\", \"UAE\");

3.4. 从嵌套Map中删除元素

要从嵌套HashMap中删除元素,类似于前面的示例,调用remove()方法。

Map<String, Map<String, String>> employeeMap = new HashMap<>();
//移除Alex的Hideout地址
employeeMap.get(\"Alex\").remove(\"Hideout\");

3.5. 遍历嵌套HashMap

我们可以像遍历普通HashMap一样遍历嵌套Map。

Map<String, Map<String, String>> employeeMap = new HashMap<>();
for (Map.Entry<String, Map<String, String>> empMap : employeeMap.entrySet()) {
  Map<String, String> addMap = empMap.getValue();
  //迭代内部map
  for (Map.Entry<String, String> addressSet : addMap.entrySet()) {
    System.out.println(addressSet.getKey() + \" :: \" + addressSet.getValue());
  }
}

4.结论

我们学习了嵌套Map以及如何创建它们,添加、删除和遍历元素。还看到了可以在哪些情况下使用嵌套Map。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9379.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号