首页 > 解决方案 > Java集合Framewok Map输出问题

问题描述

    String A="A";
    String B="A";
    String C= new String("A");
    Map m1=new HashMap<String,String>();
    m1.put(A,"A");
    m1.put(B,"A");
    m1.put(C,"A");
    System.out.println(m1.size());

为什么地图大小为 1 任何人都可以解释工作并解释地图大小是 1 吗?

标签: java

解决方案


a 的键Map必须是唯一的。

所以通过这样做m1.put(B, "anything");,因为B = "A"您要替换与键关联的先前值"A"。该方法检查密钥equals(),如果实现是 a HashMap,它将首先查找密钥hashcode(),然后再确认等效性。

还有一点需要注意,与此无关Map。Java 尝试对包含相同内容的字符串进行去重(因为 aString是不可变的,它可以安全地做到这一点)。所以很可能String A = "A"并且String B = "A"实际上也将指向同一个对象(尽管这取决于 JVM)。

String C = new String("A");将强制它创建一个新String对象,尽管最新的垃圾收集器也会对其进行重复数据删除,并且虽然它将是不同的包装对象,但内部的缓冲区将被替换,使其与其他缓冲区相同。


推荐阅读