java HashMap 冲突

标签 java hashmap

我正在阅读有关 hashmap 的工作原理。我正在阅读 "What will happen if two different objects have same hashcode" .

根据它,如果两个对象具有相同的哈希码,两者都将存储在 LinkedList 但据我所知,如果两个哈希码,那么前一个哈希码将被新的覆盖(如果我错了,请纠正我)。

有人可以详细说明一下 hashmap 如何在内部使用对象作为键,如果两个对象具有相同的 hashcode 会发生什么,以及如何使用 get() 获取这两个对象?

最佳答案

不,第一个不会因为第二个具有相同的 hashCode 而被覆盖。

只有当它也相等时才会被覆盖(如 equals 所说)。如果没有,这两个值都将保存在链表中。

当获取一个键时,所有具有相同 hashCode 的节点将与提供的键进行比较,直到一个相等,然后返回它的值(使用 equals 方法)。

如果 map 中没有相同的键,你会得到 null

如果许多对象具有相同的 hashCode(或者更准确地说是相同的 hashCode 以内部 Entry[] 表的大小为模),那么唯一的问题是总是会读取链表,这更慢(并且破坏了任何哈希表的目的)。这就是为什么在设计 hashcode 方法以确保生成的整数分布良好时很重要的原因。

关于java HashMap 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14242899/

相关文章:

Java将Hashmap放入Treemap

java - 一个线程写数据不读,多线程读数据不写

java - 扫描仪分隔符,Reg。表达问题

Java:我可以在 HashMap 中使用数组吗?

rust - 为什么无法使用方括号 [ ] 表示法更新 HashMap 中的值?

java - 使用递归函数的 n 维 HashMap

java - 为什么不允许外部接口(interface)为 HashMap 提供 hashCode/equals?

java - 允许分别提供相等比较器和散列函数的映射

java - MSSQL 数据库锁阻止我的应用程序?

java - 适用于普通 Java 桌面应用程序的分析服务/API