2012-03-22 37 views
1

我在TreeMap中有一個TreeMap。使用putAll()複製樹圖的java樹形圖

TreeMap <String, TreeMap<String, Double>> x_probs_org = new TreeMap<String, TreeMap<String, Double>>(); 

但是,當我再拍一個具有完全相同的定義,然後複製第一個:

x_probs.putAll(x_probs_org); 

我注意到新的映像樹不復制的一切。它正確地複製了所有的String鍵,但只是該值的最後一個元素(TreeMap)。除了滾動瀏覽整個第一個樹形圖,然後將這些元素添加到新的樹形圖之外,是否有更簡單的方法來執行此操作?

我只需要有相同的數據結構與相同的數據開始。我所做的就是運行通過其填充第一個樹形圖的循環,然後簡單地將下一個樹形圖放入同一個循環中。這也沒有工作:

// build tempMap up there... 
x_probs_org.put(tokens[0], tempMap);  
x_probs.put(tokens[0], tempMap); 

x_probs堅持缺少x_probs_org設法獲取的數據。通過填充一次「tempMap」會耗盡嗎?

回答

3

這個工作對我來說:

public static void main(String[] args) { 
    Map <String, Map<String, Double>> map = new TreeMap<String, Map<String, Double>>(); 
    Map<String, Double> innerMap = new TreeMap<String, Double>(); 
    innerMap.put("a", 1.0); 
    innerMap.put("b", 2.0); 
    map.put("inner1", innerMap); 
    innerMap = new TreeMap<String, Double>(); 
    innerMap.put("c", 3.0); 
    innerMap.put("d", 4.0); 
    map.put("inner2", innerMap); 

    Map <String, Map<String, Double>> newMap = new TreeMap<String, Map<String, Double>>(); 
    newMap.putAll(map); 

    System.out.println(map); // prints {inner1={a=1.0, b=2.0}, inner2={c=3.0, d=4.0}} 
    System.out.println(newMap); // prints {inner1={a=1.0, b=2.0}, inner2={c=3.0, d=4.0}} 
} 
0

另一個簡單的方法如下:

newMap = x_probs_org.clone();

0

您可以簡單地使用TreeMap(SortedMap<K,? extends V> m)構造,像這樣:

TreeMap <String, TreeMap<String, Double>> x_probs_org = new TreeMap<String, TreeMap<String, Double>>(); 

TreeMap <String, TreeMap<String, Double>> x_probs = new TreeMap<String, TreeMap<String, Double>>(x_probs_org); 
0

最有可能要重複使用引用(如tempMap),這就是爲什麼也是你x_probs_org是不是你希望它是什麼。或者你會感到驚訝,因爲你通過原稿修改了複製元素。

以下工作完美:

TreeMap<String, TreeMap<String, Double>> x_probs_org = 
    new TreeMap<String, TreeMap<String, Double>>(); 
TreeMap<String, Double> inner = new TreeMap<String, Double>(); 
inner.put("entry1", 1d); 
inner.put("entry2", 2d); 
x_probs_org.put("inner", inner); 

TreeMap<String, TreeMap<String, Double>> x_probs = 
    new TreeMap<String, TreeMap<String, Double>>(); 
x_probs.putAll(x_probs_org);