ガベージ コレクションが必要な新しいオブジェクトを作成せずに、Java で HashMap の値を繰り返し処理しようとしています。次のように、強化された for ループを使用して、値を反復処理するのは簡単です。
for (Value v : myMap.values()) {
....
}
しかし、これは舞台裏で Iterator オブジェクトを作成します (私は思いますか?)
私が思いついた最高のものは、このコードです:
Object[] values = myMap.values.toArray();
...standard "int i" for loop on the array
しかし、正直に言うと、GC がこの配列で何をするかはわかりません。
これを行う完璧な方法はありますか、または 1 つの再利用可能なオブジェクトでこれを行う方法はありますか?
編集: これは Android ゲーム用であり、オブジェクトを作成してパフォーマンスに影響を与えるようなループがたくさんあります。
編集 #2: 疑っている方のために説明すると、最も一般的に呼ばれる強化された for ループの一部 (主に ArrayLists) のリファクタリングは、jvisualvm ヒープ プロファイリングに基づくメモリ使用量に大きな影響を与えました。もちろん、これの一部はおそらく、ArrayList が多すぎるか、実際には必要ないときにそれらをループするためです。