java - 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 吗?
解决方案
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
对象,尽管最新的垃圾收集器也会对其进行重复数据删除,并且虽然它将是不同的包装对象,但内部的缓冲区将被替换,使其与其他缓冲区相同。
推荐阅读
- matlab - 通过函数输出对 MatLab 结构体数组进行条件索引
- sas - SAS 编程 || 长程序的捷径
- postgresql - 嵌套 Hasura GraphQL Upsert 突变有没有办法停止嵌套冲突?
- asp.net-core - 公共交通动态事件发布(json事件)的问题
- stackblitz - Luxon 没有在带有 typescript 的 stackblitz 中运行
- html - 如何单独设置 ACF 的 select 字段的元素样式
- python - 返回特定年份的单位总和
- mysql - 错误代码:1822。添加外键约束失败。引用表 'student1' 中的约束 'hod_ibfk_1' 缺少索引 0.000 秒?
- javascript - Firebase Reactjs - ae.collection 不是函数
- javascript - 如何使用 JavaScript Angular 比较新密码和确认密码