Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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
Java HashMap中哈希代码冲突的确切原因_Java_Hash_Hashmap_Hashtable - Fatal编程技术网

Java HashMap中哈希代码冲突的确切原因

Java HashMap中哈希代码冲突的确切原因,java,hash,hashmap,hashtable,Java,Hash,Hashmap,Hashtable,我知道hashmaps是如何工作的,以及它们是如何解决冲突的。但许多关于碰撞的答案都指向两个原因: HashCode协定-不相等的对象可以具有相同的哈希代码 底层数组大小-大小是固定的,因此存储桶位置在满时可以重用(使用模运算符) 我的假设是,上面的理由2也是正确的,我确信理由1也是正确的 只有一个问题: Javadoc说hashmap使用LF和容量来决定何时重新刷新。我理解这是在部分调整底层数组的大小。那么上面的理由2怎么可能呢? NB:最接近我想要理解的内容。然而,被接受的答案似乎完

我知道hashmaps是如何工作的,以及它们是如何解决冲突的。但许多关于碰撞的答案都指向两个原因:

  • HashCode协定-不相等的对象可以具有相同的哈希代码
  • 底层数组大小-大小是固定的,因此存储桶位置在满时可以重用(使用模运算符)
我的假设是,上面的理由2也是正确的,我确信理由1也是正确的

只有一个问题:

  • Javadoc说hashmap使用LF和容量来决定何时重新刷新。我理解这是在部分调整底层数组的大小。那么上面的理由2怎么可能呢?

NB:最接近我想要理解的内容。然而,被接受的答案似乎完全抛弃了理由2,因此我仍然感到疑惑。

你的理由2有缺陷。如果在同一个bucket中添加两个(不相等的)对象(hashcode%bucket.length),即使存在大量空bucket,也可以重用一个bucket。这里没有“装满”的元素,只不过当桶装满时,很明显会有更大的机会最终进入一个非空桶。

你的理由2有缺陷。如果在同一个bucket中添加两个(不相等的)对象(hashcode%bucket.length),即使存在大量空bucket,也可以重用一个bucket。这里没有“get full”元素,只不过当存储桶被填满时,很明显会有更大的机会最终进入非空存储桶。

Hashmap会根据容量(当LF*capacity