我有以下代码:
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;
}
我使用这种方法基本上首先填充哈希映射然后最终从中获取值,但问题是我看到的值被填充不再存在用于检索(不是全部,而是一些)?那么发生了什么 ?他们如何迷路,我用调试器检查并在插入时逐个看到值,但是当检索不再存在时,有什么想法吗?
答案 0 :(得分:1)
您是否正在使用这些TestObject
进行任何操作?
HashMap
(以及一般的集合)存储引用而不是其内容的新副本。对于不可变类(如String),可以使用非Immutable类,可以通过原始引用修改这些对象内容。
答案 1 :(得分:0)
填充时是否使用不同的键(总是)?如果您总是使用相同的密钥,那么您将只找到最后插入的值...