我想在Java中迭代HashMap的值而不創建任何需要垃圾收集的新對象。這是很容易迭代使用增強的for循環值,如:迭代HashMap的值而不創建任何新對象要垃圾收集
for (Value v : myMap.values()) {
....
}
但是,這將在後臺創建的Iterator對象(我想?)
我想出的最好的是這個代碼:
但老實說,我不知道GC會用這個數組做什麼。
有沒有一種完美的方法來做到這一點,或者有沒有辦法用一個可重用對象來做到這一點?
編輯:這是一個Android遊戲,並且有很多這樣的循環創建對象並影響性能。編輯#2:對於那些懷疑,我重構的只是一部分最常被稱爲增強for循環,主要是ArrayLists,已經對基於jvisualvm堆分析的內存使用產生了重大影響。當然,其中的一部分可能是因爲我有太多的ArrayLists,或者在沒有必要時循環它們。
爲什麼你不想創建一個對象?我認爲創建迭代器的開銷並不值得它創建一個(可能是古怪的)解決方法。但如果有一個很好的理由,我很感興趣聽到它。 :) –
你爲什麼在意?創建一個迭代器並進行垃圾回收非常快。不要優化不需要優化的東西。 –
爲什麼有必要沒有臨時對象? – hexafraction