簡體   English   中英

Java:本地哈希表覆蓋全局哈希表

[英]Java: local Hashtable overwriting global Hashtable

在對本地定義的哈希表執行操作時,已分配給本地哈希表的另一個類的全局哈希表也對其執行了這些操作。 我不確定這是否應該是一個簡單的問題,但是我找不到任何問題。

public void redraw(String[] sNewEntity,Hashtable<String,Entity> h){
    Hashtable<String,Entity> htEntities=h;

    htEntities.remove(sNewEntity[0]);
    //many lines of code that ensures that the removal doesn't invalidate anything
    if(validation==true){
        m_HomeFrame.graph=new mxGraph();
        m_HomeFrame.myGraphComponent = new mxGraphComponent(m_HomeFrame.graph);        
        m_HomeFrame.setScroll(m_HomeFrame.myGraphComponent);
        m_HomeFrame.m_Tree.h_entityTable=htEntities;
    }
}

這就是功能。 所有帶有“ m _”-的變量都是全局變量。 此方法采用字符串數組和哈希表,並刪除哈希表中具有字符串數組第一項關鍵字的項。 問題在於,全局哈希表(m_HomeFrame.m_Tree.h_entityTable)一旦命中(htEntities.remove(sNewEntity [0]);),就會更新。 有沒有辦法將htEntities與全局變量分離? 此外,對於未使用泛型的歉意。 在搜索哈希表內容時,我經常看到這一點。

傳入h ,您沒有傳入實際的HashTable對象。 您正在傳遞對HashTable對象的引用。 這意味着,當您更改h ,您是在更改同一對象。

解決此問題的方法是使用new關鍵字。 這將強制Java運行時創建一個新的HashTable對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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