【问题标题】:Same cell for different keys in Java SE 8 Hashmap [duplicate]Java SE 8 Hashmap中不同键的相同单元格[重复]
【发布时间】:2021-01-10 13:47:32
【问题描述】:
HashMap<String,Integer> map = new HashMap<>();

假设我使用了两次“put”函数:

map.put("hello", 4);
map.put("world", 5);

我被教导在幕后有一个哈希函数,它根据给定的键计算值应该输入的正确单元格。

我的问题是:

两种计算有可能导致相同的单元格,因此命令 #2 将导致 #1 中给出的相同单元格,因此会丢失 4 个值?

如果是这样,如果 #2 已经被占用,我该如何重新映射到另一个单元格? (我不想在 chaning 中使用哈希 ..)

【问题讨论】:

  • 您所描述的称为“哈希冲突”。是的,它们很容易发生并且在某种程度上是正常的,但是HashMap 会处理它们(换句话说,它不会因为多个键碰巧产生相同的哈希值而丢失任何值)。如果没有,它就不会很有用。
  • 所以,只是为了确保 - 你的意思是如果在这个 Java 实现中发生“哈希冲突”的情况,值 5 将进入另一个单元格并且不会覆盖以前的数据。 (开放寻址?)
  • 实际上它的实现有点不同(每个单元格实际上包含一个链表和/或树,取决于某些因素),所有键/值对都映射到这个单元格中。但结果是相似的:不会覆盖其他数据。

标签: java data-structures hash hashmap


【解决方案1】:

这正是这样做的

map.put("hello", 4);
map.put("hello", 5);

但是,我认为您的意思是当发生哈希冲突时,将不同的键放入映射中,从而产生相同的哈希。这将使用链接。

因为它们的哈希值相同,理论上,您可以在插入之前对所有内容进行 .get(object) 处理,并在碰撞时添加更改键。

但在实践中,让地图发挥作用,让底层实现按照设计的方式运行。

【讨论】:

    猜你喜欢
    • 2022-06-15
    • 1970-01-01
    • 2012-05-09
    • 2013-10-16
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    相关资源
    最近更新 更多