Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaSE8哈希映射中不同键的相同单元格_Java_Data Structures_Hash_Hashmap - Fatal编程技术网

JavaSE8哈希映射中不同键的相同单元格

JavaSE8哈希映射中不同键的相同单元格,java,data-structures,hash,hashmap,Java,Data Structures,Hash,Hashmap,我被教导,在幕后有一个哈希函数,它根据给定的键计算值应该输入的正确单元格 我的问题是: 有没有可能两次计算都会导致相同的单元格,因此命令#2会导致#1中给出的相同单元格,从而丢失4值 如果是这样,如果已经有人占用,我如何使#2重新映射到另一个单元格? (我不想将hash与chaning一起使用。)这正是这样做的 map.put("hello", 4); map.put("world", 5); 但是,我认为您的意思是当哈希冲突发生时,不同的键被放在映射中

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

我的问题是:

有没有可能两次计算都会导致相同的单元格,因此命令#2会导致#1中给出的相同单元格,从而丢失4值

如果是这样,如果已经有人占用,我如何使#2重新映射到另一个单元格? (我不想将hash与chaning一起使用。)

这正是这样做的

map.put("hello", 4);
map.put("world", 5);
但是,我认为您的意思是当哈希冲突发生时,不同的键被放在映射中,从而导致相同的哈希。这将使用链接

因为它们散列相同,理论上,在插入对象之前,您可以为所有内容获取(object),并在发生冲突时添加alter键


但实际上,让映射完成它的工作,让底层实现按照它的设计方式运行。

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