HashMap中的值重复 [英] Duplicate Value in HashMap

查看:116
本文介绍了HashMap中的值重复的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很麻烦,创建了一个hashMap,并使用相同的键插入了两个值StringBuilder作为映射的键.现在,在尝试使用StringBuilder对象检索数据时工作正常,但在其他情况下,它无法返回任何值.我在下面的代码中列出了三种情况,

I am in big trouble, created a hashMap and inserted two values with same key using StringBuilder as a key of map. Now, while trying to retrieve the data using StringBuilder object is working fine, but in other case its fails to return any value. I have listed three cases in the below given code,

`

class MainClass {

public static void main(String[] args) {

    MainClass m = new MainClass();

    StringBuilder sb = new StringBuilder("sb");
    StringBuilder sb1 = new StringBuilder("sb");

    Map<StringBuilder, String> map = new HashMap<StringBuilder, String>();
    map.put(sb, "a");
    map.put(sb1, "b");
    System.out.println("----Inside Main method---- mapValue"+map);

    System.out.println("Expected value a, coming also => " + map.get(sb)); //a
    System.out.println("Expected value b, coming also => " + map.get(sb1)); //b
    System.out.println("Expected value a, not coming  => " + map.get("sb")); // why null ?


    m.receiveMap(map, sb, sb1);

}

public void receiveMap(Map<StringBuilder, String> map, StringBuilder refSb,StringBuilder refSb1) {
    StringBuilder sb = new StringBuilder("sb");
    StringBuilder sb1 = new StringBuilder("sb");
    System.out.println("----Inside receiveMap method mapValue"+map);
    System.out.println("Expected value a, not coming  => " + map.get(sb)); // why null ?
    System.out.println("Expected value b, not coming  => " + map.get(sb1)); // why null ?

    System.out.println("Expected value a, coming also => " + map.get(refSb)); // o/p - a
    System.out.println("Expected value b, coming also => " + map.get(refSb1)); // o/p -b
}

}

推荐答案

方法 receiveMap

System.out.println("Expected value a, not coming  => " + map.get(sb)); // why null ?

因为您正在使用不同的方法创建新的 StringBuilder sb哈希码与StringBuilder sb PSVM 进行比较.

Because you are creating new StringBuilder sb in the method which having different hashcode compare to StringBuilder sb PSVM.

StringBuilder不会覆盖等于和hashCode

StringBuilder doesn't override equals and hashCode

  StringBuilder sb = new StringBuilder("sb");
  StringBuilder sb1 = new StringBuilder("sb");
  Set s = new HashSet();
  s.add(sb);
  s.add(sb1);
  System.out.println(s); 

Set不允许重复,但仍会打印 [sb,sb] ,因为StringBuilder不会覆盖equals和hashcode方法.

Set does not allow duplicate but still it prints [sb, sb] as StringBuilder does not override equals and hashcode method.

这篇关于HashMap中的值重复的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆