rehash后java hashmap值是不是已经消失了?

时间:2010-02-17 17:41:41

标签: java hashmap

我有以下代码:

private static HashMap<String, TestObject> labelHash= new HashMap<String, TestObject>();
    private static HashMap<String, TestObject> valueHash= new HashMap<String, TestObject>();

    private HashMap getChildrenInHash(int opt){
//       HashMap labelHash= new HashMap();
//       HashMap valueHash= new HashMap();

        if (valueHash.isEmpty() && labelHash.isEmpty()) {        

                if(getLabel().isShowing()){
                    TestObject[] tempArray = getLabel().getMappableParent().getMappableChildren();
                    for(int i =1; i < tempArray.length-2;i++){
                        if(tempArray[i]==null)
                            break;
                        if(tempArray[i].getProperty("text").toString().compareTo(" ")==0){
                            i+=1;

                        }
                        labelHash.put((String)tempArray[i].getProperty("text"),(tempArray[i]));

                        valueHash.put((String)tempArray[i].getProperty("text"),(tempArray[i+1]));
                        i+=2;
                }
                //System.out.println("finished filling the hashes");                
                }
            }            

        }

        if(opt ==1)
            return labelHash;
        else 
            return valueHash;

    }

我使用这种方法基本上首先填充哈希映射然后最终从中获取值,但问题是我看到的值被填充不再存在用于检索(不是全部,而是一些)?那么发生了什么 ?他们如何迷路,我用调试器检查并在插入时逐个看到值,但是当检索不再存在时,有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您是否正在使用这些TestObject进行任何操作?

HashMap(以及一般的集合)存储引用而不是其内容的新副本。对于不可变类(如String),可以使用非Immutable类,可以通过原始引用修改这些对象内容。

答案 1 :(得分:0)

填充时是否使用不同的键(总是)?如果您总是使用相同的密钥,那么您将只找到最后插入的值...