gpt4 book ai didi

java - ConcurrentHashMap 构造函数参数?

转载 作者:IT老高 更新时间:2023-10-28 20:35:14 27 4
gpt4 key购买 nike

我想知道构造一个ConcurrentHashMap的参数:

  • initialCapacity 默认为 16(已理解)。
  • loadFactor 默认为 0.75。
  • concurrencyLevel 默认为 16。

我的问题是:

  • 应该使用什么标准来向上或向下调整 loadFactor
  • 我们如何确定并发更新线程的数量?
  • 应该使用什么标准来向上或向下调整 concurrencyLevel

另外:

  • 良好哈希码实现的特点是什么? (如果一个 SO 问题解决了这个问题,只需链接到它。)

谢谢!

最佳答案

简短的回答:将“初始容量”设置为您希望在 map 中放置多少映射,并将其他参数保留为默认值。

长答案:

  • 负载系数是 map 中的“桶”数量和预期元素的数量;

  • 0.75 通常是一个合理的折衷方案——我记得,这意味着好的散列函数,平均而言我们预计大约 1.6 个重定向可以找到 map 中(或该图周围)的元素;

    • 改变负载因素改变之间的妥协更多重定向以查找元素,但更少浪费的空间——放 0.75 是确实通常物有所值;

    • 原则上,将 ConcurrencyLevel 设置为你的并发线程数希望有修改 map ,虽然高估这并没有似乎对其他有不良影响比浪费内存(我写了一点在 ConcurrentHashMap performance不久前,以防万一有兴趣)

非正式地,您的散列函数本质上应该旨在在位中具有尽可能多的“随机性”。或者更严格地说,给定元素的哈希码应该让每个位有大约 50% 的机会被设置。用一个例子来说明这一点实际上更容易:同样,你可能对我写的一些关于 how the String hash function works 的东西感兴趣。和相关的hash function guidelines .欢迎就这些内容提供反馈。

我在某些时候还提到的一件事是,在实践中您不必过于偏执:如果您的哈希函数在 一些 位中产生“合理”数量的随机性,那么它通常会没事的。在最坏的情况下,将具有代表性的数据片段粘贴到字符串中并获取字符串的哈希码实际上并没有那么糟糕。

关于java - ConcurrentHashMap 构造函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1573901/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com