You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java嵌套HashMap访问键值出现NullPointerException问题求助

问题排查与解决方案

报错根因

你遇到的空指针异常是链式调用HashMap.get()时,某一层的get返回了null,后续对null调用get()方法就触发了该异常,常见触发场景有以下几种:

  • 调用getData()之前没有执行hashMapData()方法:map1初始化后是空集合,所有的嵌套Map数据填充逻辑都在hashMapData()中,未执行该方法的情况下map1.get("ENG02")直接返回null,后续调用get()就会报错
  • 数据填充时对应层级的key不存在:哪怕执行了hashMapData(),如果循环存数据的逻辑没有写入ENG02、CENTRE092、1352中任意一个key,都会导致对应层级get返回null
  • key匹配错误:存数据和取数据的key存在大小写差异、首尾空格等隐藏差异,导致无法匹配到对应值

修复方案

1. 调整执行顺序&优化调用逻辑

确保先执行hashMapData()初始化数据,再调用getData(),同时避免直接链式调用get(),逐层判空定位问题:

public void getData() {
    HashMap<String, HashMap<String, String>> map2 = map1.get("ENG02");
    if (map2 == null) {
        System.out.println("未找到对应试卷代码:ENG02");
        return;
    }
    HashMap<String, String> map3 = map2.get("CENTRE092");
    if (map3 == null) {
        System.out.println("ENG02试卷下未找到对应考点:CENTRE092");
        return;
    }
    String studentName = map3.get("1352");
    if (studentName == null) {
        System.out.println("CENTRE092考点下未找到对应考生:1352");
        return;
    }
    System.out.println(studentName);
}

2. 封装数据写入方法避免中间层为空

用computeIfAbsent实现自动创建嵌套Map,不用手动初始化每层结构,避免中间层漏存:

// 封装写入方法
public void putExamData(String paperCode, String centreCode, String studentCode, String studentName) {
    map1.computeIfAbsent(paperCode, k -> new HashMap<>())
        .computeIfAbsent(centreCode, k -> new HashMap<>())
        .put(studentCode, studentName);
}

// 调用示例,直接写入三层数据
putExamData("ENG02", "CENTRE092", "1352", "ABCDE");

3. 调试验证key是否存在

如果还是报错,可以打印各层的key集合确认数据是否正确写入:

// 打印所有已存试卷代码
System.out.println("已存试卷代码:" + map1.keySet());
if (map1.containsKey("ENG02")) {
    // 打印ENG02下的所有考点代码
    System.out.println("ENG02下已存考点:" + map1.get("ENG02").keySet());
    if (map1.get("ENG02").containsKey("CENTRE092")) {
        // 打印CENTRE092下的所有考生编号
        System.out.println("CENTRE092下已存考生编号:" + map1.get("ENG02").get("CENTRE092").keySet());
    }
}

额外注意:你代码中的system.out.println存在语法错误,需要改为首字母大写的System.out.println,否则会触发编译错误。


内容的提问来源于stack exchange,提问作者rino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:09:04