我对 hashMap 和 hashSet 内部功能的了解非常少,我需要帮助!
所以: 哈希映射: 我不能放置两个具有相同键的对象,所以当我有对象 A 和 B 时,第一个对象有, 例如:hashcode() 为:3918192,第二个为 3918191。
为了简单起见,让我们想象一下,hashMap 的大小为 4,它会将哈希码转换为这样的地址:A 为 3,B 为 3,因此它们位于同一地址。因此,HashMap 不存在这样的假设不存储具有相同键的对象需要更多细节,我们是否需要说:HashMap 在 MODULO 操作后不会添加两个具有相同 hashCode 的对象? 或者当它有两个对象可能具有相同的地址时,它是否检查完整的 hashCode() ?如果两个 hashCode() 不同,创建一个 linkedList?
对于哈希集: 它使用与 hashMap 相同的步骤将对象存储在地址中,但是等等,如果我再次使用上面的示例,另外让我们承认对象具有 equals & hashCode() 方法返回与上面相同的值: 3918192 对于 A 和B 3918191, 那么 hashSet 会将 A 放入 3 并将 B 放入 ? 3!但在这里我认为 hashSet 将使用 Equals 来检查它们是否真的相等!如果不是的话它将把 B 放在哪个地址?
你需要了解hashmap的内部实现。 HashMap 在内部实现为 LinkedList 数组。 Java首先获取hashcode(),然后生成索引。基于生成的 Index,Key 与 hashcode、Key、value、next 指针一起存储在 LinkedList 中。对于第一次出现,下一个指针将指向空,但如果我们再次获得相同的索引,则会将一个新节点添加到链表中,并且下一个指针将指向最后生成的节点。在 Java 8 中,它被优化为每个数组索引最多 8 个节点。
参考下面的文章了解HashMap的内部实现
https://www.geeksforgeeks.org/internal-working-of-hashmap-java/ 希望有帮助