我使用ConcurrentHashMap
作为我的数据结构,因为多个线程将同时读取和写入它。但我发现客户端代码也需要经常迭代它。所以我查看了LinkedHashMap类,它提供了更好的迭代性能,并在其java doc中找到了这一部分:
链接哈希映射有两个影响其性能的参数: 初始容量和负载系数。它们的确定义如下 HashMap中。但请注意,选择过度的惩罚 对于这个类,初始容量的高值不太严重 HashMap,因为此类的迭代次数不受容量的影响。
所以迭代不依赖于容量。一般来说,其他操作依赖于LinkedHashMap或HashMap的初始容量?在最近的JDK版本中是否还有LinkedHashMap的并发版本?
答案 0 :(得分:0)
除迭代外,其他操作依赖于LinkedHashMap的初始容量
正如其所述,容量对于迭代并不重要。初始容量很少有很大差异,如果您的负载因子合理,容量将根据需要增长。
最近的JDK版本中还有LinkedHashMap的并发版本
ConcurrentHashMap是最接近的。如果您需要并发访问,请使用此功能。
答案 1 :(得分:0)
如果查看HashMap javadoc,它会声明:
容量是哈希表中的桶数,初始容量只是创建哈希表时的容量。
也是
当哈希表中的条目数超过加载因子和当前容量的乘积时,哈希表将被重新哈希(即,重建内部数据结构),以便哈希表的数量大约是哈希表的两倍。桶。
LinkedHashMap是一个基于HashTable的实现,使用链表来维护顺序。初始容量不会影响迭代性能。我认为唯一依赖于容量的操作是可能导致表格重组的插入操作。 图