簡體   English   中英

HashMap更改值引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM