You need to enable JavaScript to run this app. Java HashMap<String,String[]> 如何输出键与对应字符串数组的所有元素
优惠活动
大模型
产品
解决方案
定价
更多

Java HashMap<String,String[]> 如何输出键与对应字符串数组的所有元素

问题本质

直接打印mentry.getValue()输出数组哈希地址,是因为Java原生数组类型未重写Object类的toString()方法,和字符串拼接时会调用默认实现,输出格式为数组类型@十六进制哈希值,无法展示数组内部存储的学生姓名。

适配需求的修改方法

你的预期输出要求每个科目对应的学生姓名以空格分隔连为一行,无需额外符号,实现该需求最简便的方式是直接用JDK自带的工具方法处理数组内容,无需手动遍历数组逐个拼接。

最小改动版修改

保留你原有的迭代器遍历逻辑,仅做两处调整:

  • 将原有不带泛型的原始类型Set、Iterator替换为带泛型声明的类型,去掉冗余的强制类型转换,避免类型安全问题
  • 打印时用String.join(" ", mentry.getValue())替代直接拼接mentry.getValue()的逻辑,将字符串数组的所有元素以空格为间隔拼接成普通字符串
    修改后的遍历代码片段:
// 带泛型的集合声明,无需手动强转
Set<Map.Entry<String, String[]>> set = this.subjects.entrySet();
Iterator<Map.Entry<String, String[]>> iterator = set.iterator();
while(iterator.hasNext()) {
    Map.Entry<String, String[]> mentry = iterator.next();
    // 用String.join将数组元素按空格拼接,完全匹配预期输出格式
    String allStudents = String.join(" ", mentry.getValue());
    System.out.println(mentry.getKey() + " : " + allStudents);
}

简化版修改(适配JDK 8及以上版本)

如果项目使用JDK 8或更高版本,可以直接用Map自带的forEach方法简化遍历逻辑,无需手动创建迭代器:

public void initialDetails() {
    this.subjects.put("English", new String[] {"Alex Lamplough", "Kayleigh Lamplough", "Bella Lamplough"});
    // 其余原有put操作保持不变
    this.subjects.forEach((subject, studentArr) -> {
        String studentStr = String.join(" ", studentArr);
        System.out.println(subject + " : " + studentStr);
    });
}
注意事项
  • 不要直接使用Arrays.toString(mentry.getValue())替代打印逻辑,该方法的默认输出会带方括号、逗号分隔符(例如[Alex Lamplough, Kayleigh Lamplough]),和要求的纯空格分隔的输出格式不匹配,需要额外做字符串替换才能达到效果,不如直接用String.join简便。
  • 不要手动写循环遍历数组逐个拼接字符串,重复代码多且容易出现首尾多拼接空格的问题,String.join是JDK专门为字符串数组拼接提供的工具方法,边界处理更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 17:06:02