我对 HashMap 有疑问。当插入新的键值对时,它会更改存储为值的引用。
我使用 HashMap 来更快地访问以非常分层的结构存储的对象。插入第一对时,其地址与原始地址相同。添加另一对后,HashMap 中存储的地址发生了变化。因此我无法通过 HashMap 获取原始对象。
为什么会这样?
这是我如何构造 HashMap 的代码。在第二种方法中,在第一个 for 循环中发生上述情况。
private Map<String, Parameter> createRefMap(Settings settings) {
Map<String, Parameter> result = new HashMap<String, Parameter>();
for (ParameterList parameterList : settings.getParameterList()) {
result.putAll(createRefMap(parameterList, "SETTINGS"));
}
return result;
}
private Map<String, Parameter> createRefMap(ParameterList parameterList, String preLevel) {
Map<String, Parameter> result = new HashMap<String, Parameter>();
String level = preLevel + "/" + parameterList.getName();
for (Parameter parameter : parameterList.getParameter()) {
result.put(level + "/" + parameter.getName(), parameter);
}
for (ParameterList innerParameterList : parameterList.getParameterList()) {
result.putAll(createRefMap(innerParameterList, level));
}
return result;
}
这就是我所说的
this.actRefMap = createRefMap(this.actAppSettings);