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

Java向Map添加元素时多key对应Set重复问题求解

问题原因
  • 核心是所有key共享了同一个Set<String>实例:你大概率是在循环外只创建了一次Set对象,每次输入国家后直接往这个Set里添加元素,再把这个Set赋值给TreeMap的不同key。因为Java是引用传递,TreeMap里所有key存储的都是同一个Set的内存地址,最终这个Set积累了所有输入的国家,自然所有key查询到的内容完全一致。
典型错误代码示例
TreeMap<Integer, Set<String>> groupA = new TreeMap<>();
Set<String> countries = new HashSet<>(); // 仅在循环外创建一次Set实例
Scanner sc = new Scanner(System.in);
for (int i = 1; i <= 4; i++) {
    System.out.println("请输入第" + i + "个国家:");
    String country = sc.nextLine();
    countries.add(country);
    groupA.put(i, countries); // 每次都存入同一个Set的引用
}
解决方法
  • 每次循环都创建新的Set实例,确保每个key对应独立的存储容器:把Set的创建逻辑移动到循环内部,每录入一个国家就新建一个Set存储该国家,再放到TreeMap对应的key中即可。
修正后代码示例
TreeMap<Integer, Set<String>> groupA = new TreeMap<>();
Scanner sc = new Scanner(System.in);
for (int i = 1; i <= 4; i++) {
    System.out.println("请输入第" + i + "个国家:");
    String country = sc.nextLine();
    Set<String> countries = new HashSet<>(); // 每次循环新建独立的Set实例
    countries.add(country);
    groupA.put(i, countries);
}
  • 如果你确认每个key仅对应单个国家,也可以直接将TreeMap的泛型改为TreeMap<Integer, String>,无需使用Set存储,逻辑更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 22:09:00