【发布时间】:2010-11-22 09:12:14
【问题描述】:
这是我的情况。我正在使用两个 java.util.HashMap 将一些常用数据存储在运行在 Tomcat 上的 Java Web 应用程序中。我知道每个 Hashmap 的确切条目数。键将分别是字符串和整数。
我的问题是,设置初始容量和负载因子的最佳方法是什么?
我是否应该将容量设置为等于它将拥有的元素数量并将负载容量设置为 1.0?我希望在不使用太多内存的情况下获得绝对最佳的性能。但是,我担心该表不会以最佳方式填充。使用所需的确切大小的表,是否不会发生键冲突,导致(通常很短)扫描以找到正确的元素?
假设(这是一个延伸)哈希函数是整数键的简单模 5,这是否意味着键 5、10、15 会命中同一个桶,然后导致查找填充他们旁边的水桶?更大的初始容量会提高性能吗?
另外,如果有比哈希图更好的数据结构,我也完全愿意接受。
【问题讨论】:
-
总条目将在 20 - 50 之间,字符串键长度的字符数将在 10-30 之间
-
那是相当小的,你确定你还需要担心吗?除非您有很多实例,否则请使用默认的 HashMap 参数。
-
if( (Time_saved_per_operation_because_of_this_Optimization x Number_of_Operations)
-
这将被高度利用,并且花费在此上的时间和进行更改的时间非常少。感谢所有的 cmets!
-
@instanceofTom 您忘记将
knowledge gained添加到您的公式中