HashMap java中的Remove方法不起作用
我已使用方法HashMap java中的Remove方法不起作用,java,hashmap,Java,Hashmap,我已使用方法“remove(key)”删除了映射,但仅删除了值。当我调用keySet()方法时。钥匙还在那儿!!。 在下面的程序中,我想找到两组(HashMap中的2个map)有最短的距离。然后合并它们,这意味着我需要删除这两个组,并将合并的组放到地图上 /* I have already initiate the HashMap groups*/ ArrayList<String> listGroupNames ; while (currentNumberOfGroup >
“remove(key)”
删除了映射,但仅删除了值。当我调用keySet()
方法时。钥匙还在那儿!!。
在下面的程序中,我想找到两组(HashMap中的2个map)有最短的距离。然后合并它们,这意味着我需要删除这两个组,并将合并的组放到地图上
/* I have already initiate the HashMap groups*/
ArrayList<String> listGroupNames ;
while (currentNumberOfGroup > 1000){
System.out.println("Groups" + currentNumberOfGroup);
listGroupNames = new ArrayList<String>(groups.keySet());
/* Name of two groups will be merged*/
String candidate1 = "";
String candidate2 = "";
double maxSimilarity = 0;
/* finding two groups which have shortest distance*/
for(String event1 : listGroupNames){
for(String event2 : listGroupNames){
if(!event1.equalsIgnoreCase(event2)){
Group group1 = groups.get(event1);
Group otherGrp = groups.get(event2);
double similarity = group1.getMaxSimilarityWith(otherGrp, simpledEvent);
if(similarity > maxSimilarity){
maxSimilarity = similarity;
candidate1 = event1;
candidate2 = event2;
}
}
}
}
/* 2 groups have shortest distance were found already*/
/* Merge 2 groups then replace these two groups by merged group*/
Group groupCandidate1 = groups.get(candidate1) ;
Group groupCandidate2 = groups.get(candidate2) ;
Group mergerdGroup = groupCandidate1.mergeToOtherGroup(groupCandidate2);
/*remove 2 found groups*/
groups.remove(candidate2);
groups.remove(candidate1);
groups.put(mergerdGroup.name, mergerdGroup);
listGroupNames.clear();
currentNumberOfGroup --;
}
/*我已经启动了HashMap组*/
ArrayList列表组名;
而(currentNumberOfGroup>1000){
System.out.println(“组”+currentNumberOfGroup);
listGroupNames=newArrayList(groups.keySet());
/*将合并两个组的名称*/
字符串candidate1=“”;
字符串candidate2=“”;
双最大相似性=0;
/*寻找距离最短的两组*/
对于(字符串事件1:ListGroupName){
对于(字符串事件2:ListGroupName){
如果(!event1.equalsIgnoreCase(event2)){
group1=groups.get(event1);
groupothergrp=groups.get(event2);
双重相似性=group1.getMaxSimilarityWith(otherGrp,SimpleEvent);
如果(相似性>最大相似性){
最大相似性=相似性;
候选1=事件1;
候选2=事件2;
}
}
}
}
/*已找到距离最短的两组*/
/*合并两个组,然后用合并组替换这两个组*/
groupgroupcandidate1=groups.get(candidate1);
groupgroupcandidate2=groups.get(candidate2);
groupmergerdgroup=groupCandidate1.mergetouthergroup(groupCandidate2);
/*删除找到的2个组*/
组。移除(候选2);
组。移除(候选1);
groups.put(mergerdGroup.name,mergerdGroup);
listGroupNames.clear();
currentNumberOfGroup--;
}
您没有包含足够的代码,我们无法正确诊断问题,因此这是一个一般性的答案
您可以断言已使用groups.remove(key)
删除了一个密钥,但当您通过groups.keyset()返回的对象查看密钥时,该密钥仍然存在
这是“不可能发生的”。如果钥匙被取下,它将不在钥匙集中。此外,由于键(看起来)是String
对象,我们实际上可以排除equals
和hashcode
存在问题的可能性
那么有什么可能的解释呢?这里有一些
- 两个上下文中的
组
对象是不同的
- 在移除和检查钥匙组之间添加一个或多个钥匙。(例如,
mergerdGroup.name
实际上等于candidate1
或candidate2
)
- 钥匙其实不一样。。。他们只是看起来一样
@PatriciaShanahan-钥匙似乎是字符串……让我困惑的是,你如何“知道”钥匙还在那里。我想我们需要一个SSCE来了解这里发生了什么。无论如何,看看groupCandidate1.mergeTotherGroup
会有帮助,这样我们就知道mergerdGroup.name
是如何确定的了。@StephenC说得好。@HoaVu-我们需要一个SSCE。谢谢。我发现很难上传所有的代码。这很复杂。我会按照你的建议检查代码。@HoaVu-SSCCE并不意味着“上传所有代码”。这意味着创建一个展示相同问题的小型工作示例。