我已使用方法"remove(key)"
删除了地图,但只删除了该值。当我调用keySet()
方法时。关键还在那里!!
下面的程序,我想找到两组(HashMap中的2个映射)具有最短距离。然后合并它们,这意味着我需要删除这两个组并将合并的组放到地图上。
/* 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 --;
}
答案 0 :(得分:3)
您没有提供足够的代码以便我们正确诊断问题,因此这是一般答案。
您声明已使用groups.remove(key)
删除了密钥,但是当您通过groups.keyset()
返回的对象查看密钥时,密钥仍然存在。
这是“不可能发生的”。如果删除了某个键,它将不在键集中。此外,由于密钥是(看起来)String
个对象,我们实际上可以排除equals
和hashcode
出现问题的可能性。
那有什么可能的解释呢?这是一些。
groups
个对象不同。mergerdGroup.name
实际上等于candidate1
或candidate2
。)