我遇到了HashMap的问题。当插入新的Key-Value-Pairs时,它会更改存储为值的引用。
我使用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);
答案 0 :(得分:0)
如果我理解正确,如果你这样做:
System.out.println(thing1.toString());
myMap.put(key1, thing1);
myMap.put(key2, thing2);
System.out.println(thing1.toString());
第二个println会以某种方式打印出来自不同对象的结果吗?它是任何特定的对象,还是随机的一个?你所说的问题是不可能的;它会打破一些无法想象的java程序。
你的断言的一部分是“地址”的变化;我不确定你的意思。对象id,在许多调试器中可见?物理内存地址?同样,如果发生这些事情中的任何一件事,地图就会被打破。
如果您的实际问题是对thing1的其他一些引用不再具有地图中引用的内容,那么您将在某处更改对thing1的外部引用。