我有一个结构
HashMap<String,HashMap<Integer, HashMap<Integer, question>>> lang=new HashMap<String,HashMap<Integer, HashMap<Integer, question>>>();
HashMap<Integer,HashMap<Integer,question>> section= new HashMap<Integer,HashMap<Integer,question>>();
HashMap<Integer,question> questions= new HashMap<Integer,question>();
根据我的逻辑,我填写了问题,
while(logic){
for(someother logic){
//make the skeleton structure of the object
questions.add(integer,object);
}
section.add(integer,map3);
}
现在,我将此map2用作骨架并进行更改
HashMap<Integer,HashMap<Integer,object>> tempMap= new HashMap<Integer,HashMap<Integer,object>>();
while(logicnew){
while(logic 2){
tempMap = new HashMap(section);
while(logic 3){
tempMap2 = new HashMap(tempMap.get(integer));
//make my changes
}
}
lang.add(integer,tempMap);
}
多种语言有多个部分,多个部分有多个问题。
问题是值已经写完了,即如果我的第一语言的法语文本和第二语言的英语文本,我在制作的两个语言映射中都只能看到英语文本。你能告诉我出什么问题了吗?让我知道是否还有更好的方法。
谢谢!
最佳答案
HashMap是一个通过引用传递的对象(您应该仔细阅读)。
如果要重用map2,请确保正确克隆map2。否则,您对map2所做的修改将反映在所有HashMap实例中。
在重用map2之前执行此操作:
map2 = (HashMap) map2.clone();
请注意,这是一个浅表副本。
阅读此处以了解更多信息:http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html#clone%28%29
HashMap的深层克隆:
public HashMap deepClone(HashMap map) {
HashMap clone = new HashMap();
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
Object key = it.next();
Object value = map.get(key);
clone.put(key.clone(), value.clone());
}
return clone;
}
这只是一个示例实现,为您提供了一个可使用的模板。您应该确保HashMap是类型安全的,并且键和值具有Object.clone()的深层克隆实现。
关于java - 复制哈希图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10943958/