哪些操作取决于LinkedHashMap的容量?是否有可用的并发版本?

时间:2012-09-06 12:05:36

标签: java data-structures java.util.concurrent

我使用ConcurrentHashMap作为我的数据结构,因为多个线程将同时读取和写入它。但我发现客户端代码也需要经常迭代它。所以我查看了LinkedHashMap类,它提供了更好的迭代性能,并在其java doc中找到了这一部分:

  

链接哈希映射有两个影响其性能的参数:   初始容量和负载系数。它们的确定义如下   HashMap中。但请注意,选择过度的惩罚   对于这个类,初始容量的高值不太严重   HashMap,因为此类的迭代次数不受容量的影响。

所以迭代不依赖于容量。一般来说,其他操作依赖于LinkedHashMap或HashMap的初始容量?在最近的JDK版本中是否还有LinkedHashMap的并发版本?

2 个答案:

答案 0 :(得分:0)

  

除迭代外,其他操作依赖于LinkedHashMap的初始容量

正如其所述,容量对于迭代并不重要。初始容量很少有很大差异,如果您的负载因子合理,容量将根据需要增长。

  

最近的JDK版本中还有LinkedHashMap的并发版本

ConcurrentHashMap是最接近的。如果您需要并发访问,请使用此功能。

答案 1 :(得分:0)

如果查看HashMap javadoc,它会声明:

  

容量是哈希表中的桶数,初始容量只是创建哈希表时的容量。

也是

  

当哈希表中的条目数超过加载因子和当前容量的乘积时,哈希表将被重新哈希(即,重建内部数据结构),以便哈希表的数量大约是哈希表的两倍。桶。

LinkedHashMap是一个基于HashTable的实现,使用链表来维护顺序。初始容量不会影响迭代性能。我认为唯一依赖于容量的操作是可能导致表格重组的插入操作。 图