2012-03-22 17 views
1

私はTreeMap内にTreeMapを持っています。putAll()を使ってtreemapのjava treemapをコピーする

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();

あなたは、単にこのように、 TreeMap(SortedMap<K,? extends V> m)コンストラクタを使用することができます
0

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); 
関連する問題