2014-04-15 33 views
0

我讀入文件,如:更新映射值一個TreeMap <字符串,TreeSet的<String>>

Tom Boyscouts Red_Cross 
Jim Boyscouts FLBA 
Jerry FBLA Red_Cross 


    while (file.ready()) { 
     ArrayList<String> nameToOrg= new ArrayList<String>(Arrays.asList(file.readLine().split(" "))); 
     String members = list.remove(0); 

     for (String key : nameToOrg) { 
      if (treemap.get(key) == null) { 
       TreeSet<String> membersAdded = new TreeSet<String>(); //Declare new TreeSet 
       membersAdded.add(members);        //Add this member 
       treemap.put(key, membersAdded);       //put(key,TreeSet) 
      }else{ 
       //.get the existing set of members 

       //add this new member 

       //.put back into map 
      } 
     } 
    } 

    file.close(); 

電流輸出將是...

Boyscouts = [Jim] 
FBLA = [Jerry] 
Red_Cross = [Jerry] 

我想會輸出是

Boyscouts = [Jim, Tom] 
FBLA = [Jerry, Jim] 
Red_Cross = [Jerry, Tom] 

我大多被我的for循環else語句絆倒。我的教授給了我們僞代碼,但我不確定如何從TreeSet中獲取現有的成員集,然後更新它。編輯: 謝謝!你們兩個都有很好的答案,真的幫了我很大的忙。

回答

0

使用Map.get()Map.put()方法。

關於這個過程的提示:你可能會問「爲什麼我需要重新插入物品」?僅更新它是不夠的?好吧,不幸的是,沒有,因爲地圖不知道變化。

比方說,我們已經有了一個二叉搜索樹(比如,在Java中一個TreeMap):

    2 
       1  3 

如果更新1至4的記錄,地圖不會注意到的變化和你「會落得一個無效的BST:

    2 
       4  3 

現在,一個奇怪的情況可能發生bst.contains(4)回報falsebst.keySet().contains(4)回報true

欲瞭解更多詳情,你可以看到this SO question

在這種情況下,儘管由於密鑰(String s)是不可變的,但它不應該被需要。

0

如果密鑰已經存在於map中,還有一部分代碼在其他部分丟失。喜歡。從地圖 獲取列表和添加member,即

treemap.get(key).add(members); 

試試吧

for (String key : nameToOrg) { 
      if (treemap.get(key) == null) { 
      TreeSet<String> membersAdded = new TreeSet<String>(); //Declare new TreeSet 
      membersAdded.add(members);        //Add this member 
       treemap.put(key, membersAdded);       //put(key,TreeSet) 
      }else{ 
       treemap.get(key).add(members);//write here code 
      } 
     } 
+0

我已經嘗試過這樣做,但這只是最終將每個名稱添加到每個組織。像Boyscouts = [Jim,Jerry,Tom],Red_Cross = [Jim,Jerry,Tom]等 – user3287300

相關問題