2017-02-27 27 views
1

嵌套TreeMap中:如何映射值的嵌套式TreeMap的

TreeMap<String,TreeMap<String,TreeMap<String,String>>> map = new TreeMap<>(); 

把東西映射到樹形圖:

add("1","1","1","111",map); 
    map.add("1","1","1","111"); 
    map.put("1", ("1",("1","111"))); 

我試圖如上看到的東西映射到嵌套TreeMap中,但沒有我試過的工作。什麼是正確的方式來做我想要的?

回答

3

您必須一次完成一個步驟,例如,簡單的情況下,假設所有子映射已經存在(注意,我們得到現有地圖):

map.get("1").get("1").put("1", "111"); 

然而,這種情況並非如此根據您的描述,等的每一步你」將不得不創建一個新的項目,如果不存在,所以它變得更加複雜,因爲你必須查找當前地圖,然後創建/加入:

// from your example: 

String key1 = "1"; 
String key2 = "1"; 
String key3 = "1"; 
String value = "111"; 

// insert if doesn't exist yet: 

TreeMap<String,TreeMap<String,String>> map1 = map.get(key1); 

if (map1 == null) { 
    map1 = new TreeMap<String,TreeMap<String,String>>(); 
    map.put(key1, map1); 
} 

// and again: 

TreeMap<String,String> map2 = map1.get(key2); 

if (map2 == null) { 
    map2 = new TreeMap<String,String>(); 
    map1.put(key2, map2); 
} 

// and now we're set up and ready to go: 

map2.put(key3, map3); 

由於它是一種累贅,它一般有助於編寫一個實用程序功能爲您執行此操作。

或者,如果它是適合您的應用程序,你可以考慮崩潰您的整個結構成一個單一的地圖,並使用更復雜的鍵,例如:

static class ComplicatedKey implements Comparable<ComplicatedKey> { 
    String key1; 
    String key2; 
    String key3; 
    public ComplicatedKey (String key1, String key2, String key3) { ... } 
    // implement equals and compareTo appropriately. 
} 

然後:

TreeMap<ComplicatedKey,String> map = ...; 

map.put(new ComplicatedKey("1", "1", "1"), "111"); 

另一種選擇是推出自己的多級樹,甚至可以在每個節點內部使用TreeMap來維護子節點列表。

+0

您的第一個解決方案非常完美!非常感激! – NikonJR