2015-11-07 82 views
0

我有一個這樣的地圖。在java中的地圖和哈希圖

Map<Object,Map<Object,Map<Object,Object>>> mapCurrentMap 

而另一張圖:

Map<Object,Map<Object,Map<Object,Object>>> copyCurrentMap 

現在,我想所有的數據複製從mapCurrentMapcopyCurrentMap,當我在copyCurrentMap更改數據,那麼在mapCurrentMap數據不應該改變。 我用的HashMap但它的返回結果不是我想要的。所以,有人幫助你。

回答

0

請嘗試類似的東西:

Map<Object,Map<Object,Map<Object,Object>>> deepCopy(Map<Object,Map<Object,Map<Object,Object>>> src) { 
    final Map<Object,Map<Object,Map<Object,Object>>> dst = new HashMap<Object, Map<Object, Map<Object, Object>>>(); 
    for (Object key : src.keySet()) { 
     final HashMap<Object, Map<Object, Object>> copy = new HashMap<Object, Map<Object, Object>>(); 
     final Map<Object, Map<Object, Object>> innerMap = src.get(key); 
     for (Object innerKey : innerMap.keySet()) { 
      Map<Object,Object> innerCopy = new HashMap<Object, Object>(innerMap.get(innerKey)); 
      copy.put(innerKey, innerCopy); 
     } 
     dst.put(key, copy); 
    } 
    return dst; 
} 

我真的不知道它的工作,但我覺得你的想法......你必須Map<Object,Object>複製到另一個Map<Object,Object>上的最低水平。 ,以上各級需要「從原來的 - >用同樣的鑰匙複製」。

+0

>感謝您的支持。但是如果我的地圖像這樣: Map >>>>> mapCurrentMap如果使用「for」這麼長時間。 –

+0

我沒有看到任何其他解決方案。這個想法是,你必須在任何地方都有新的參考,這不是初始地圖的參考。我無法想象如果沒有遍歷所有對象的樹,它是如何可能的。 –

+0

對不起,我想我誤解了你的評論。 「長」,你的意思是,不是性能(我所理解的),而是代碼行。如果是這樣,您可以按照此處所述的類似方法使用遞歸:http://stackoverflow.com/a/9337639/1842599 –