Java_基础—集合嵌套之HashMap嵌套HashMap

本文通过具体案例展示了如何使用Java实现HashMap嵌套HashMap的数据结构,包括定义不同班级的学生及其归属地,并通过双层遍历输出所有信息。
package com.soar.map;

import java.util.HashMap;

import com.soar.bean.Student;

public class Demo8_HashMapHashMap {
    /*
     * * A:案例演示
     * 集合嵌套之HashMap嵌套HashMap
     * 
     * 需求:
     * 一班键是学生,值是学生的归属地
     * 二班键是学生,值是学生的归属地
     * 
     * 将班级对象添加到双列集合中
     */
    public static void main(String[] args) {
        //定义一班
        HashMap<Student,String> hm1 = new HashMap<>();
        hm1.put(new Student("张三",23),"北京");
        hm1.put(new Student("李四",24),"北京");
        hm1.put(new Student("王五",25),"上海");
        hm1.put(new Student("赵六",26),"广州");

        //定义二班
        HashMap<Student,String> hm2 = new HashMap<>();
        hm2.put(new Student("唐僧",123),"北京");
        hm2.put(new Student("孙悟空",1024),"北京");
        hm2.put(new Student("猪八戒",1025),"上海");
        hm2.put(new Student("沙和尚",269),"广州");

        //定义大集合
        HashMap<HashMap<Student,String>,String> hm = new HashMap<>();
        hm.put(hm1, "一班");
        hm.put(hm2, "二班");

        //遍历双列集合
        for (HashMap<Student,String> h : hm.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);
                /*

Student [name=孙悟空, age=1024]=北京二班
Student [name=猪八戒, age=1025]=上海二班
Student [name=沙和尚, age=269]=广州二班
Student [name=唐僧, age=123]=北京二班
Student [name=张三, age=23]=北京一班
Student [name=李四, age=24]=北京一班
Student [name=王五, age=25]=上海一班
Student [name=赵六, age=26]=广州一班

                */
            }
        }
    }

}
### 三级标题:Java 中判断嵌套 HashMap 是否包含某个键 在 Java 中,当使用嵌套结构的 `HashMap` 时,判断某个键是否存在需要逐层调用 `containsKey()` 方法。这种方式可以确保每一步都只在当前层级的 `HashMap` 上操作,并安全地访问下一层级。 假设有一个两层嵌套的 `HashMap<String, HashMap<String, Integer>>` 结构,表示“类别 - 键值对”的数据模型。要判断最内层是否包含特定键,可以通过以下方式实现: ```java // 初始化嵌套 HashMap HashMap<String, HashMap<String, Integer>> nestedMap = new HashMap<>(); // 添加外层键 "CategoryA" HashMap<String, Integer> innerMap = new HashMap<>(); innerMap.put("key1", 100); nestedMap.put("CategoryA", innerMap); // 判断嵌套 HashMap 中是否存在指定键 boolean outerKeyExists = nestedMap.containsKey("CategoryA"); // 检查外层键是否存在 if (outerKeyExists) { HashMap<String, Integer> innerMapRef = nestedMap.get("CategoryA"); boolean innerKeyExists = innerMapRef.containsKey("key1"); // 检查内层键是否存在 System.out.println("Inner key exists: " + innerKeyExists); // 输出结果为 true } ``` 上述代码通过逐层检查 `containsKey()` 来确认嵌套结构中某一层的键是否存在。这种方式适用于已知键路径的情况[^2]。 #### 使用 computeIfPresent 安全处理可能缺失的键 为了增强代码的健壮性并避免空指针异常,可以使用 `computeIfPresent()` 方法来仅在键存在的情况下执行操作。该方法允许在键存在时获取对应的值并进行进一步判断或修改。 ```java nestedMap.computeIfPresent("CategoryA", (outerKey, innerMapRef) -> { boolean innerKeyExists = innerMapRef.containsKey("key1"); System.out.println("Inner key exists: " + innerKeyExists); return innerMapRef; }); ``` 此方式通过链式调用 `computeIfPresent()` 来确保每一步都只在键存在的情况下才执行操作,从而避免了潜在的 `NullPointerException`。 #### 批量遍历嵌套 HashMap 并查找键 如果需要在整个嵌套结构中查找某个键,可以使用嵌套循环遍历每一层的键值对,并逐层检查。 ```java String targetKey = "key1"; boolean found = false; for (HashMap<String, Integer> innerMapRef : nestedMap.values()) { if (innerMapRef.containsKey(targetKey)) { found = true; break; } } System.out.println("Target key found: " + found); ``` 这种方式适合批量查找嵌套结构中的某个键,例如在全局范围内搜索特定标识符。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值