JAVA基础(HashMap嵌套HashMap)

本文探讨了在Java编程中如何使用HashMap进行嵌套操作,详细解析了HashMap如何内部实现另一个HashMap,以及这种数据结构在实际应用中的关键点和注意事项。

1,集合嵌套之HashMap嵌套HashMap


 

public class Demo8_HashMapHashMap {





    /**

     * * A:案例演示

     * 集合嵌套之HashMap嵌套HashMap

     *

     * 需求:

     * A班定义成一个双列集合,键是学生对象,值是学生的归属地

     *B班定义成一个双列集合,键是学生对象,值是学生的归属地

     *

  

     */

    public static void main(String[] args) {

  

        HashMap<Student, String> xiaoshuai1 = new HashMap<>();

        xiaoshuai1 .put(new Student("张三", 23), "北京");

        xiaoshuai1 .put(new Student("李四", 24), "北京");

        xiaoshuai1 .put(new Student("王五", 25), "上海");

        xiaoshuai1 .put(new Student("赵六", 26), "广州");

        



        HashMap<Student, String> xiaoshuai2= new HashMap<>();

        xiaoshuai2.put(new Student("唐僧", 1023), "北京");

        xiaoshuai2.put(new Student("孙悟空",1024), "北京");

        xiaoshuai2.put(new Student("猪八戒",1025), "上海");

        xiaoshuai2.put(new Student("沙和尚",1026), "广州");

        

    

        HashMap<HashMap<Student, String>, String> xiaoshuai3= new HashMap<>();

        xiaoshuai3.put(xiaoshuai1, "A班");

        xiaoshuai3.put(xiaoshuai2, "B班");

        

        //遍历双列集合

        for(HashMap<Student, String> h : xiaoshuai3.keySet()) {        //hm.keySet()代表的是双列集合中键的集合

            String value = hm.get(h);                        //get(h)根据键对象获取值对象

            //遍历键的双列集合对象

            for(Student key : h.keySet()) {                    //h.keySet()获取集合总所有的学生键对象

                String value2 = h.get(key);

                

                System.out.println(key + "=" + value2 + "=" + value);

            }

        }

        

    }





}

 

### 三级标题:修改嵌套 HashMap 的值 在 Java 中,`HashMap` 支持嵌套结构,即一个 `HashMap` 可以作为值存储在另一个 `HashMap` 中。这种结构常用于表示多层次的数据关系,例如班级-小组-学生这样的层级模型[^2]。如果需要修改嵌套 `HashMap` 中的值,可以通过逐层获取子映射并操作其内容的方式来实现。 #### 获取并更新嵌套 Map 的值 假设有一个三层嵌套的 `HashMap<String, HashMap<String, HashMap<String, Integer>>>` 结构,表示“班级 - 小组 - 学生分数”。要修改某个学生的分数,首先需要获取到最内层的 `HashMap`,然后调用其 `put()` 方法进行更新。 ```java // 初始化嵌套 HashMap HashMap<String, HashMap<String, HashMap<String, Integer>>> schoolMap = new HashMap<>(); // 创建班级映射 HashMap<String, HashMap<String, Integer>> classMap = new HashMap<>(); // 创建小组映射 HashMap<String, Integer> groupMap = new HashMap<>(); groupMap.put("studentA", 85); // 将小组添加到班级中 classMap.put("Group1", groupMap); schoolMap.put("Class50", classMap); // 修改嵌套 HashMap 中的值 HashMap<String, HashMap<String, Integer>> classEntry = schoolMap.get("Class50"); HashMap<String, Integer> groupEntry = classEntry.get("Group1"); groupEntry.put("studentA", 90); // 更新 studentA 的分数 ``` 上述代码中,通过逐层获取外层和中间层的 `HashMap`,最终访问到最内层的 `HashMap` 并对其执行 `put()` 操作来更新值。这种方式适用于已知键路径的情况。 #### 使用 computeIfPresent 避免空指针异常 为了增强代码的健壮性,可以使用 `computeIfPresent()` 方法来安全地处理可能为 `null` 的情况。该方法只有在指定键存在时才会执行计算函数。 ```java schoolMap.computeIfPresent("Class50", (className, classMapRef) -> { classMapRef.computeIfPresent("Group1", (groupName, groupMapRef) -> { groupMapRef.put("studentA", 95); // 更新值 return groupMapRef; }); return classMapRef; }); ``` 此方式通过链式调用 `computeIfPresent()` 来确保每一步都只在键存在的情况下才执行操作,从而避免了潜在的 `NullPointerException`。 #### 多层嵌套结构中的遍历与修改 如果需要对嵌套结构中的所有值进行统一修改,可以使用嵌套循环遍历每一层的键值对,并对最内层的 `HashMap` 执行操作。 ```java for (HashMap<String, HashMap<String, Integer>> classEntry : schoolMap.values()) { for (HashMap<String, Integer> groupEntry : classEntry.values()) { for (String studentName : groupEntry.keySet()) { groupEntry.put(studentName, 100); // 设置所有学生成绩为 100 } } } ``` 这种方式适合批量更新嵌套结构中的数据,例如将某次考试的所有成绩设为满分。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴帅_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值