我正在尝试找出特定情况下的最佳容量和负载系数。我想我的主旨是,但我仍然要感谢比我知识渊博的人的确认。:) 如果我知道我的HashMap将充满以包含100个对象,并且大部分时间将花费100个对象,那么我猜最佳值是初始容量100和负载因子1?还是我需要101个容量,或者还有其他陷阱? 编辑:好的,我预留了几个小时并做了一些测试。结果如下: 奇怪的是,容量,容量+1,容量+2,容量1甚至容量10都产生完全相同的结果。我希望至少容量1和容量10会产生较差的结果。 使用初始容量(与使用默认值16相反)可以显着改善put()-快30%。 如果负载因子为1,则对于较少数量的对象将具有相同的性能,而对于较大数量的对象(> 100000)将具有更好的性能。但是,这并不能与对象的数量成比例地提高。我怀疑还有其他因素会影响结果。 对于不同数量的对象/容量,get()性能略有不同,但是尽管情况可能会略有不同,但是通常不受初始容量或负载因子的影响。 EDIT2:我也添加了一些图表。在初始化HashMap并将其填充到最大容量的情况下,这是一个说明负载系数0.75与1之间的差异的示例。y标度是时间(单位为ms)(越小越好),x标度是大小(对象数)。由于大小线性变化,因此所需的时间也线性增长。 所以,让我们看看我得到了什么。以下两个图表显示了负载系数的差异。第一张图显示了当HashMap满负荷时会发生什么;负载系数0.75由于调整大小而表现较差。但是,情况并没有一直恶化,而且还有各种各样的颠簸-我想GC在这方面起着重要作用。负载系数1.25与1相同,因此未包含在图表中。 该图表表明0.75由于调整大小而变差;如果我们将HashMap填充到一半容量,则0.75并不差,只是...有所不同(并且它应该使用更少的内存,并且具有显着更好的迭代性能)。 我想展示一件事。这是针对所有三个负载因子和不同的HashMap大小获得的性能。恒定不变,除了负载因子1的一个峰值外,几乎没有变化。我真的很想知道那是什么(可能是GC,但谁知道)。 这是那些有兴趣的代码: import java.util.HashMap; import java.util.Map; public class HashMapTest { // capacity - numbers high as 10000000 require -mx1536m -ms1536m JVM parameters public static final int CAPACITY = 10000000; public static final int ITERATIONS = 10000; // set to …