【发布时间】: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