在HashMap中删除方法java不起作用

时间:2013-09-18 04:07:40

标签: java hashmap

我已使用方法"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 --;      
}

1 个答案:

答案 0 :(得分:3)

您没有提供足够的代码以便我们正确诊断问题,因此这是一般答案。

您声明已使用groups.remove(key)删除了密钥,但是当您通过groups.keyset()返回的对象查看密钥时,密钥仍然存在。

这是“不可能发生的”。如果删除了某个键,它将不在键集中。此外,由于密钥是(看起来)String个对象,我们实际上可以排除equalshashcode出现问题的可能性。

那有什么可能的解释呢?这是一些。

  • 两个上下文中的groups个对象不同。
  • 在删除和检查键集之间添加了一些或多个键。 (例如,mergerdGroup.name实际上等于candidate1candidate2。)
  • 键实际上并不相同......它们看起来一样。