向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
相关产品推荐
相关产品推荐

