我有下面这段代码:
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;
}我使用这种方法基本上是最初填充hashmap,然后最终从其中获取值,但问题是我看到的填充到其中的值不再存在于检索中(不是全部,而是一些)?那么到底是怎么回事呢?它们是如何丢失的,我检查了调试器,在插入时一个接一个地看到值,但当检索到值时就不再存在了,有什么想法吗?
发布于 2010-02-18 02:08:58
你在用这些TestObject做什么吗?
HashMap(和一般的集合)存储一个引用,而不是其内容的新副本。对于不可变的类,例如String,这是可以的,但是对于非不可变的类,您可以通过原始引用修改这些对象的内容。
发布于 2010-02-18 02:12:40
填充时(总是)使用不同的键吗?如果您总是使用相同的键,那么您将只找到最后插入的值...
https://stackoverflow.com/questions/2283022
复制相似问题