位模式的哪些属性会导致冲突?

Jim*_*Jim 6 java algorithm hash hashmap hash-collision

我正在读关于Java的方法随机哈希键在这里
很显然的想法是,以确保在低位为"随机",以帮助分布,但我想明白这一点了.
因此,如果我们有一个大小为10的表,那么数字0,10,20,30,40等都落在桶0中,数字1,11,21,31等落在桶1等中(使用模10).
因此,改变位模式可以使它们进入不同的存储桶,而不是全部进入存储桶0.
但是我不清楚的是它是什么属性使得低阶位影响这一点,我们需要将它们随机化.所以我们有:

0000 0000 (0)  
0000 1010 (10)  
0001 0100 (20) 
0001 1110 (30)  
0010 1000 (40) 
Run Code Online (Sandbox Code Playgroud)

低阶位的规律性是什么使它们被放置在同一个插槽中?
也许我对以下内容感到困惑?我的理解是,低阶位中的一些规律性会导致冲突,我们会尝试随机化比特来进行补偿

ric*_*ici 2

一些哈希函数在随机化低位位方面做得非常糟糕。

一个典型的例子是使用硬件地址作为对象引用(C 中的“指针”)的散列,否则这将是一种廉价地获取对象 ID 的唯一编号的合理方法。如果哈希表的存储桶计数是素数,那么这会很好地工作,但对于存储桶数量始终是 2 的幂的哈希实现来说,所有哈希值都可以被 8 整除的事实意味着大多数存储桶是空的。

这是一种极端情况,但只要要散列的数据分布不均匀并且散列函数倾向于保留低位,您就会发现存储桶分配中存在一些偏差。