代码胜于雄辩,所以:
final int size = 100;
Map<Integer, String> m = new HashMap<>(size);
for (int i = 0; i < size; i++) m.put(i, String.valueOf(i));
为什么 HashMap 内部调用时间!resize() 21 2(感谢 Andreas 发现 JVM 在内部使用 HashMaps,21 个 cals 中有 19 个来自其他进程)
resize()我的应用程序仍然不能接受两次调用。我需要优化这个。
如果我是一个新的 Java 开发人员,我对 HashMap 构造函数中的“容量”意味着什么的第一个直观猜测是,它是我(HashMap 的使用者)将要放入 Map 的元素数量的容量。但是这是错误的。
如果我想优化我对 HashMap 的使用,以便它根本不需要调整自身大小,那么我需要足够密切地了解 HashMap 的内部结构,以准确了解 HashMap 存储桶数组需要有多稀疏。这在我看来很奇怪。HashMap 应该隐式地为你做这件事。这是 OOP 中封装的全部要点。
注意:我已经确认 resize() 是我的应用程序用例的瓶颈,所以这就是为什么我的目标是减少对 resize() 的调用次数。
问题:
如果我知道条目的确切数量,我将事先放入地图中。我选择什么容量,以防止任何额外的呼叫resize()操作?像size * 10什么?我还想了解为什么HashMap以这种方式设计的一些背景知识。
编辑:我经常被问到为什么这种优化是必要的。我的应用程序在 hashmap.resize() 中花费了大量 CPU 时间。我的应用程序使用的哈希映射的初始化容量等于我们放入其中的元素数量。因此,如果我们可以减少 resize() 调用(通过选择更好的初始容量),那么我的应用程序性能就会提高。
阿晨1998
慕运维8079593
一只萌萌小番薯
相关分类