【发布时间】:2019-11-28 09:55:12
【问题描述】:
我正在使用Map<Integer, HashMap<String, List<Employee>>> 类型的地图。填充地图后,如果我立即使用 String 键检索一些值,则返回的 List<Employee> 是正确的。但是经过一些迭代后,值正在发生变化。
第一次填充地图后,我没有在任何地方使用map.put,只使用了map.get()。
private Map<Integer, HashMap<String, List<Employee>>> createDataMap(List<Employee> employeeList) {
for(Employee e:employeeList){
Map<Integer, HashMap<String, List<Employee>>> dataMap = new HashMap<>();
int level = Integer.parseInt(e.getLevel());
HashMap<String, List<Employee>> detailsMap = dataMap.get(level);
if (Objects.isNull(detailsMap)) {
detailsMap = new HashMap<>();
dataMap.put(level, detailsMap);
}
String deptName = key.getDepartment();
List<Employee> keyList = detailsMap.get(deptName);
if (Objects.isNull(keyList)) {
keyList = new ArrayList<>();
detailsMap.put(dataMapKey, keyList);
}
keyList.add(key);
}
return dataMap;
}
【问题讨论】:
-
提供您的代码?
-
为了简化您的代码,您可以使用
Map类的getOrDefault,而不是在获取地图后测试其值是否为空 -
您的代码没有意义。
dataMap由每个员工在循环中 构造,然后在在循环之外 返回。那甚至不会编译。一般来说,请查看处理条件创建逻辑的detailsMap = map.computeIfAbsent(level, HashMap::New)
标签: java hashmap hash-collision