Java 如何基于负载因子在ConcurrentHashMap中对元素进行分组
我在一些帖子中读到: ConcurrentHashMap根据基于loadfactor的接近度对元素进行分组Java 如何基于负载因子在ConcurrentHashMap中对元素进行分组,java,hashmap,concurrenthashmap,load-factor,Java,Hashmap,Concurrenthashmap,Load Factor,我在一些帖子中读到: ConcurrentHashMap根据基于loadfactor的接近度对元素进行分组 这种分组是如何发生的 假设我重写hashCode()函数,使其始终返回1。现在,loadfactor的较高值和较低值将如何影响对ConcurrentHashMap的插入 现在我重写了hashCode()函数,以便它总是返回不同的hashCode。现在,loadfactor的较高值和较低值将如何影响对ConcurrentHashMap的插入 hashmap本质上是一个列表数组。例如,假设一个
hashCode()
函数,使其始终返回1。现在,loadfactor
的较高值和较低值将如何影响对ConcurrentHashMap的插入hashCode()
函数,以便它总是返回不同的hashCode。现在,loadfactor
的较高值和较低值将如何影响对ConcurrentHashMap的插入hashmap本质上是一个列表数组。例如,假设一个给定的hashmap有一个包含100个列表的数组。当您向其中添加某些内容时,将计算该对象的哈希代码。然后使用该值的模数和列表数(在本例中为100)来确定将其添加到哪个列表中。所以,如果您添加一个hashcode为13的对象,它将被添加到列表13中。若您添加一个hascode为12303512的对象,它将被添加到列表12中 加载因子告诉hashmap何时增加列表的数量。它基于整个地图中的项目数量和当前容量 在第一个场景中,hashcode总是返回1,无论有多少个列表,对象都会在同一个列表中结束(这是错误的)。在第二个场景中,它们将更均匀地分布在列表中(这是好的)
由于加载因子基于映射的总体大小,而不是列表的大小,因此哈希代码的质量实际上并不与加载因子交互。在第一个场景中,它将像在第二个场景中一样增长,但不管怎样,所有内容最终都将在同一个列表中。hashmap本质上是一个列表数组。例如,假设一个给定的hashmap有一个包含100个列表的数组。当您向其中添加某些内容时,将计算该对象的哈希代码。然后使用该值的模数和列表数(在本例中为100)来确定将其添加到哪个列表中。所以,如果您添加一个hashcode为13的对象,它将被添加到列表13中。若您添加一个hascode为12303512的对象,它将被添加到列表12中 加载因子告诉hashmap何时增加列表的数量。它基于整个地图中的项目数量和当前容量 在第一个场景中,hashcode总是返回1,无论有多少个列表,对象都会在同一个列表中结束(这是错误的)。在第二个场景中,它们将更均匀地分布在列表中(这是好的)
由于加载因子基于映射的总体大小,而不是列表的大小,因此哈希代码的质量实际上并不与加载因子交互。在第一个场景中,它将像在第二个场景中一样增长,但不管怎样,所有内容最终都将在同一个列表中。如果hashcode负责分发,那么当loadfactor出现在图片中时,它将如何影响分发接近0或1,正如我已经解释过的,如果所有对象都具有相同的hashcode,负载系数无关紧要。地图上的查找退化为未排序列表中的搜索性能。如果hashcode负责分布,那么当loadfactor出现在图片中时,它如何影响分布接近0或1,正如我已经解释过的,如果所有对象都具有相同的hashcode,则加载因子无关紧要。地图上的查找退化为未排序列表中的搜索性能。