Java:本地Hashtable覆盖全局Hashtable

时间:2014-04-19 22:26:12

标签: java hashtable

在本地定义的Hashtable上执行操作时,分配给本地Hashtable的另一个类的全局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;
    }
}

这是功能。所有带有&#34; m _&#34; - 的变量都是全局变量。此方法采用字符串数组和散列表,并删除具有字符串数组的第一项的键的散列表项。问题是全局哈希表(m_HomeFrame.m_Tree.h_entityTable)一碰到就会更新(htEntities.remove(sNewEntity [0]);)。有没有办法将htEntities与全局变量分离? 另外,对于不使用泛型而道歉。我经常在搜索哈希表时看到它。

1 个答案:

答案 0 :(得分:4)

当您传入h时,您并未传递实际的HashTable对象。您正在传递对HashTable对象的引用。这意味着当您对h进行更改时,您将对同一个对象进行更改。

解决此问题的方法是使用new关键字。这将强制Java运行时创建一个新的HashTable对象。