[英]HashMap changes the values references
我的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);
如果我正確理解您的意思,如果您執行以下操作:
System.out.println(thing1.toString());
myMap.put(key1, thing1);
myMap.put(key2, thing2);
System.out.println(thing1.toString());
第二個println將以某種方式打印出不同對象的結果? 它是任何特定的對象,還是只是一個隨機的對象? 您陳述的問題是不可能的; 它將破壞大量的Java程序。
您的斷言的一部分是“地址”發生了變化。 我不確定你的意思。 對象ID,在許多調試器中可見嗎? 物理內存地址? 同樣,如果發生以上任何一種情況,Map將被破壞。
如果您的實際問題是對Thing1的其他引用在地圖中不再具有該引用的內容,那么您正在某個地方將對TH1的外部引用進行更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.