Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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
Java7和Java8中哈希映射的差异_Java_Hashmap - Fatal编程技术网

Java7和Java8中哈希映射的差异

Java7和Java8中哈希映射的差异,java,hashmap,Java,Hashmap,当Java 7和Java 8都使用常数复杂度算法时,它们的哈希映射有什么不同?根据我的理解,哈希映射通过哈希函数为对象生成哈希键,在固定时间内进行搜索。在Java 7中,如果有多个元素的哈希值与线性搜索的哈希值相同,则从哈希函数计算哈希值后,其复杂度为(n)。在Java8中,该搜索是通过二进制搜索执行的,因此复杂性将变为log(n)。因此,散列映射以恒定的复杂性搜索对象的概念是错误的,因为并非总是如此。您可能会发现Java专家的最新版本非常有用。多年来,它深入讨论了Java中的哈希;例如,指出最

当Java 7和Java 8都使用常数复杂度算法时,它们的哈希映射有什么不同?根据我的理解,哈希映射通过哈希函数为对象生成哈希键,在固定时间内进行搜索。

在Java 7中,如果有多个元素的哈希值与线性搜索的哈希值相同,则从哈希函数计算哈希值后,其复杂度为(n)。在Java8中,该搜索是通过二进制搜索执行的,因此复杂性将变为log(n)。因此,散列映射以恒定的复杂性搜索对象的概念是错误的,因为并非总是如此。

您可能会发现Java专家的最新版本非常有用。多年来,它深入讨论了Java中的哈希;例如,指出最好确保映射键实现可比较(使用Java8时)。

@MDaniyal回答正确,没有使用描述两个或多个元素具有相同哈希的情况的短语:“哈希冲突”。如果您想更深入地了解哈希冲突,我建议从这里开始:实际上有一个阈值,如JEP180中所述,当一个bucket/bin有超过8个条目时,它将转换为一个树。在线性搜索冲突的Java7中,有一个DOS保护:一个随机种子Xord和散列,以降低它们的可预测性。这个函数在Java8中被删除了。如果我们深入到实现中,它正是您所解释的@eckes