我想知道用于构造ConcurrentHashMap
的参数:
initialCapacity
默认为16(理解)。 loadFactor
默认为0.75。 concurrencyLevel
默认为16。 我的问题是:
loadFactor
? concurrencyLevel
? 另外:
谢谢!
最佳答案
简短的答案:将“初始容量”设置为您希望放入映射中的映射数,并将其他参数保留为默认值。
长答案:
map 中“存储桶”的数量,以及
预期要素的数量;
良好的哈希函数,平均而言,我们
期望大约1.6重定向找到一个
map 中(或该图周围)的元素;
因素改变了
更多重定向以查找元素,但
减少浪费的空间-放置0.75为
通常真的很有值(value);
您的并发线程数
希望可以修改 map ,
虽然高估了这并没有
似乎对其他人有不良影响
而不是浪费内存(我写了一点
在ConcurrentHashMap performance上
前一阵子,如果你是
感兴趣)
非正式地,您的散列函数本质上应该旨在在位中具有尽可能多的“随机性”。或更严格地说,给定元素的哈希码应给每个位大约50%的被设置的机会。实际上,用一个示例来说明这一点更容易:同样,您可能对我写的有关how the String hash function works和关联的hash function guidelines的某些内容感兴趣。对这些东西的任何反馈都非常欢迎。
我在某些时候还提到的一件事是,在实践中您不必太偏执:如果您的哈希函数在某些位中产生“合理”数量的随机性,那么通常就可以了。在最坏的情况下,将代表性的数据粘贴到字符串中并获取字符串的哈希码实际上并没有那么糟糕。