请教大家:我有一个嵌套的HashMap 如:{key1={a=1,b=2,c=3},key2={d=1,e=2},...},我现在是要根据传过来的一对k,v值(k对应大HashMap的key,v对应小HashMap的key)来对这个嵌套的HashMap进行更新.比如现在传过来key1,a 我就把key1对应的小HashMap{a=1,b=2,c=3}拿出来放进预先定义的一个临时HashMap里.然后把a对应的出现次数,即数字1拿出来加1后再放回去,这样这个小HashMap就变为{a=2,b=2,c=3},然后我再将小HashMap put回大HashMap里,于是大HashMap就是{key1={a=2,b=2,c=3},key2={d=1,e=2},...}了.现在的问题是那个临时的HashMap我只在程序前面定义了一次,我在每次把小HashMap put回大HashMap后都会调用小HashMap的clear来移除所有映射关系,以便下一次的使用.现在问题是我调用完clear后,大HashMap里已经存在的小HashMap也跟着变空了.我于是就再定义一个临时的HashMap用来存放那个临时小HashMap的clone,把这个clone的HashMap put回大HashMap里.但是还是一样,调用clone的HashMap的clear后大HashMap里已经存在的小HashMap还是跟着变空了.不知道这个问题该如何解决,请达人指点.
Map tempMap = orgMap.get(key1);
tempMap.put("a",value);
orgMap.put(key1,tempMap);
tempMap = orgMap.get(key2);
tempMap.put("a",value);
orgMap.put(key2,tempMap);
...........
HashMap<String, String> hpP = new HashMap<String, String>();
hpP.put("k1", "1");
hpP.put("k2", "2");
hp.put("k1", hpP);
hp.put("k2", hpP);
hp.put("k3", hpP); System.out.println(hp);
Iterator i=hp.keySet().iterator();
while(i.hasNext()){
String key = (String)i.next();
HashMap hparam=(HashMap)hp.get(key);
hp.remove(hparam);
hparam.put("k1","2");
hp.put(key,hparam);
}
System.out.println(hp);
HashMap<String, String> hpP = new HashMap<String, String>();
hpP.put("k1", "1");
hpP.put("k2", "2");
hp.put("k1", hpP);
hp.put("k2", hpP);
hp.put("k3", hpP); System.out.println(hp);
Iterator i=hp.keySet().iterator();
int k=0;
while(i.hasNext()){
String key = (String)i.next();
HashMap hparam=(HashMap)hp.get(key).clone();
hp.remove(hparam);
hparam.put("k1",k);
hp.put(key,hparam);
k=k+1;
}
System.out.println(hp);
以HashMap为基类派生出自己的HashMap子类,然后重写clone()看了一下HashMap中的clone是public object clone();
好象HashMap本身没重载clone(),是用的object Class中默认的clone();
JAVA中的都是对象的引用所以导致在外面执行了tmpkey.clear后,HashMap中的那个key也被clear了
,因为它们是同一个key对象的引用。由于这样的原因所以要用到clone,注意一下HashMap的Object clone();这个函数是怎么实现的。