更新TreeMap的映射值<string,treeset <string =“”>&gt; </string,>

时间:2014-04-15 16:39:10

标签: java map set

我正在阅读如下文件:

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中获取现有成员集,然后更新它。

编辑: 谢谢!你们两个都有很好的答案,真的帮助了我。

2 个答案:

答案 0 :(得分:1)

如果地图中已存在密钥,则其他部分中仍会缺少某些代码。喜欢。 从地图获取列表并添加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
            }   
        }

答案 1 :(得分:1)

使用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)是不可变的。