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

Java中基于二维数组创建双键Map的实现问题求助

问题分析与解决方案

你遇到的问题核心是对Java Map的键值对应逻辑理解有偏差,再加上没准确捕捉到断言要求的数据结构~我来一步步帮你理清:

为什么原代码只保留最后一个值?

Java里的HashMap<String, String>是单值映射:每个键(比如"firstname")只能对应一个值。你原代码里三次循环反复对同一个键执行put操作,每次都会覆盖掉之前存储的值,所以循环结束后,每个键自然就只剩二维数组最后一行的对应内容了。

断言要求的是什么数据结构?

从断言代码phoneBook2.get(0).get("firstname")能看出来,phoneBook2需要是一个嵌套Map:

  • 外层Map的键是二维数组的索引(Integer类型),值是另一个Map;
  • 内层Map的键是"firstname"、"surname"、"phoneNumber",对应存储每一行数组的三个元素。

这样外层Map的size()就等于二维数组的行数(也就是断言要求的100),完全匹配需求。

正确的代码实现

// 定义嵌套Map:外层用数组索引作为键,内层存储单个用户的完整信息
Map<Integer, Map<String, String>> phoneBook2 = new HashMap<>();

for (int i = 0; i < phoneBook.length; i++) {
    // 为当前行创建一个内层Map,存放三个字段
    Map<String, String> userDetails = new HashMap<>();
    userDetails.put("firstname", phoneBook[i][0]);
    userDetails.put("surname", phoneBook[i][1]);
    userDetails.put("phoneNumber", phoneBook[i][2]);
    // 将索引和用户信息存入外层Map
    phoneBook2.put(i, userDetails);
}

匹配断言的验证逻辑

  • phoneBook2.get(0)会取出索引0对应的内层Map,再调用.get("firstname")就正好等于phoneBook[0][0],完美匹配第一个断言;
  • 同理,phoneBook2.get(0).get("surname")和phoneBook2.get(0).get("phoneNumber")也会对应数组第一行的后两个元素;
  • 外层Map的size()等于二维数组的行数,也就是100,完全符合最后一个断言的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:42:33