2

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

链接哈希图有两个影响其性能的参数:初始容量和负载因子。它们的定义与 HashMap 一样。但是请注意,对于此类而言,为初始容量选择过高值的惩罚不如 HashMap 严重,因为此类的迭代时间不受容量的影响。

所以迭代不依赖于容量。还有哪些其他操作通常取决于 LinkedHashMap 或 HashMap 的初始容量?在最近的 JDK 版本中是否有任何并发​​版本的 LinkedHashMap ?

4

2 回答 2

0

除了迭代之外,其他操作取决于 LinkedHashMap 的初始容量

正如它所说,容量对于迭代并不重要。初始容量几乎不会产生太大影响,如果您的负载系数合理,容量将根据需要增长。

在最近的 JDK 版本中是否有任何并发​​版本的 LinkedHashMap

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

于 2012-09-06T12:12:44.917 回答
0

如果您查看 HashMap javadoc,它会指出:

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

还有那个

当哈希表中的条目数超过负载因子和当前容量的乘积时,对哈希表进行重新哈希(即重建内部数据结构),使哈希表的桶数大约增加一倍。

LinkedHashMap 是一种基于 HashTable 的实现,使用链表来维护顺序。初始容量不会影响迭代性能。我相信唯一取决于容量的操作是可能导致表重新散列的插入操作。地图

于 2012-09-06T13:07:54.437 回答