我试图在 Java 中迭代 HashMap 的值,而不创建任何需要进行垃圾收集的新对象。使用增强的 for 循环很容易迭代值,如下所示:
for (Value v : myMap.values()) {
....
}
但这将在幕后创建一个 Iterator 对象(我认为?)
我想出的最好的是这段代码:
Object[] values = myMap.values.toArray();
...standard "int i" for loop on the array
但老实说,我不确定 GC 会对这个数组做什么。
有没有一种完美的方法来做到这一点,或者有没有办法用一个可重用的对象来做到这一点?
编辑:这是针对 Android 游戏的,有很多这样的循环会创建对象并影响性能。
编辑#2:对于那些怀疑的人,我重构了最常被称为增强 for 循环的一部分,主要是在 ArrayLists 上,对基于 jvisualvm 堆分析的内存使用产生了重大影响。当然,部分原因可能是因为我有太多的 ArrayList,或者在没有必要时循环它们。