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

标签 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;
    }
}

这是函数。所有带有“m_”的变量都是全局变量。此方法采用字符串数组和哈希表,并删除哈希表中具有字符串数组第一项的键的项。问题是全局哈希表 (m_HomeFrame.m_Tree.h_entityTable) 一旦命中 (htEntities.remove(sNewEntity[0]);) 就会更新。有没有办法解除 htEntities 与全局变量的关联? 另外,很抱歉没有使用泛型。我在搜索哈希表内容时经常看到这种情况。

最佳答案

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

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

关于Java:本地哈希表覆盖全局哈希表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23176279/

相关文章:

java - 当我没有任何实例变量时可以使用静态方法吗?

java - JBoss 不支持的主要.次要版本 52.0

C++ - 在没有循环的情况下查找稀疏矩阵值

java使用两个哈希表比一个更好?

vb.net - 在VB.NET中使用值创建哈希表

haskell - Data.Hashtable的算法复杂度

通过远程桌面进行 Java 渲染

java - 在 runOnUiThread 线程中修改我的 ArrayList 是否安全?

java - JHipster UserService - 变量可能尚未初始化

Python MyHashTable 类 : search method with linear probing