我正在阅读如下文件:
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 :(得分: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)
关于此过程的说明:您可能会问“为什么我需要重新插入该项目”?仅仅更新它还不够吗?嗯,不幸的是没有,因为地图不知道变化。
假设我们有一个二叉搜索树(比如Java中的TreeMap):
2
1 3
如果您使用1到4更新记录,地图将不会注意到更改,您最终会得到无效的BST:
2
4 3
现在,bst.contains(4)
返回false
而bst.keySet().contains(4)
返回true
时可能会发生奇怪的情况。
有关详细信息,请参阅this SO question。
在这种情况下,不应该使用它,因为键(String
s)是不可变的。