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

向Map<Integer, List<Integer>>添加新元素时遇到异常求助

问题分析与解决

问题根源

你遇到的所有楼层List同步更新的问题,核心原因是Map中所有键都引用了同一个List对象实例。如果初始化deliveredPassengerMap时,你是先创建一个List,再把这个List重复赋值给不同的楼层键,那么所有楼层对应的List其实是同一个内存地址里的对象——不管操作哪个楼层的List,本质都是在修改同一个集合,自然会出现同步更新的现象。

解决方案

1. 修正Map初始化逻辑

确保每个楼层键对应独立的List实例,不要复用同一个List:

// 错误示例:复用同一个List
List<Integer> sharedList = new ArrayList<>();
deliveredPassengerMap.put(1, sharedList);
deliveredPassengerMap.put(2, sharedList);

// 正确示例:每个楼层创建新的List
deliveredPassengerMap.put(1, new ArrayList<>());
deliveredPassengerMap.put(2, new ArrayList<>());

2. 优化人员添加代码(可选)

你当前的遍历逻辑可以简化,直接通过楼层键获取对应List,无需遍历整个Map,效率更高:

// 直接通过目标楼层键获取人员列表
List<Integer> targetFloorPassengers = deliveredPassengerMap.get(passenger);
if (targetFloorPassengers != null) {
    targetFloorPassengers.add(passenger);
}

// 若需要处理目标楼层不存在的场景(自动创建List并添加)
// if (targetFloorPassengers == null) {
//     targetFloorPassengers = new ArrayList<>();
//     deliveredPassengerMap.put(passenger, targetFloorPassengers);
// }
// targetFloorPassengers.add(passenger);

System.out.println("=====Delivered Passenger Map=====");
System.out.println(deliveredPassengerMap);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:50:28