为啥 Hashmap 值在使用重复键时被替换,即使它在内部为每个存储桶使用链表? [复制]

Posted

技术标签:

【中文标题】为啥 Hashmap 值在使用重复键时被替换,即使它在内部为每个存储桶使用链表? [复制]【英文标题】:Why Hashmap values are getting replaced when duplicate key are used, even though it uses linked list for each bucket internally? [duplicate]为什么 Hashmap 值在使用重复键时被替换,即使它在内部为每个存储桶使用链表? [复制] 【发布时间】:2019-10-20 02:50:09 【问题描述】:

我正在修改 HashMap 的概念,只是想检查一下 Entry 类的每个桶的链表实现是如何工作的。

public static void main(String[] args) 
    HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
    map.put(1, 1);
    map.put(1, 2);
    map.put(1, 3);
    map.put(2, 1);
    map.put(2, 2);
    System.out.println(map.values());

上面的代码打印 3,2。 它不应该打印 1、2、3、1、2。

【问题讨论】:

谢谢汤姆,第一个链接完美地解释了这一点。请让我知道如何删除此问题。 【参考方案1】:

您将值 1, 2, 3 插入到键 1 中,并将值 1, 2 插入到键 2 中。每次将值插入键时,您覆盖键中先前存在的值,假设存在先前的值。因此,您的代码在功能上与此相同:

HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(1, 3);
map.put(2, 2);

也就是说,只有最新的键值分配真正“坚持”。

【讨论】:

以上是关于为啥 Hashmap 值在使用重复键时被替换,即使它在内部为每个存储桶使用链表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Index.html 脚本标记值在运行时被替换

如何使用 EntityFramework 4.1 CodeFirst 防止十进制值在保存时被截断为 2 位? [复制]

为啥我的弹性 beantalk 实例在我部署时被替换?

为啥我的代码中的 SQL 命令在运行时被“TODO: FUNC”替换?

为啥插入重复主键时 Kudu 不会失败?

TreeMap 或 HashMap 更快[重复]