java - 将重复键放入 HashMap 时会发生什么?

标签 java hashmap hashtable

如果我将同一个键多次传递给 HashMapput 方法,原始值会怎样?如果连值都重复了怎么办?我没有找到任何关于此的文档。

案例 1:覆盖键的值

Map mymap = new HashMap();
mymap.put("1","one");
mymap.put("1","not one");
mymap.put("1","surely not one");
System.out.println(mymap.get("1"));

我们得到肯定不是一个

案例 2:重复值

Map mymap = new HashMap();
mymap.put("1","one");
mymap.put("1","not one");
mymap.put("1","surely not one");
// The following line was added:
mymap.put("1","one");
System.out.println(mymap.get("1"));

我们得到一个

但是其他值会怎样呢?我正在向一个学生教授基础知识,我被问到这个问题。 Map 是否像一个桶,其中最后一个值被引用(但在内存中)?

最佳答案

根据定义,put 命令替换与映射中给定键关联的先前值(概念上类似于基本类型的数组索引操作)。

map 只是删除了对值的引用。如果没有其他东西持有对该对象的引用,那么该对象就有资格进行垃圾回收。此外,Java 返回与给定键关联的任何先前值(或 null 如果不存在),因此您可以确定存在什么并在必要时维护引用。

更多信息在这里:HashMap Doc

关于java - 将重复键放入 HashMap 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1669885/

相关文章:

java - 使用 return 语句递归打印数字

java - JPA 无法以多对一关系持久保存实体

algorithm - 关于散列 - 二次探测证明

java - HashMap 实现,其中有来自两个类的输入

java - 在插入映射之前循环遍历字符串中的每个字符的大 O 表示法

c++ - 删除动态内存

java - cordapp-template-java "Cannot resolve symbol ' 文档'"

java - 在Android中连接数据库

java - 反转 HashMap

c - 在 C 中寻找数组(与链表)哈希表实现