2012-06-22 61 views
-2

我有一個問題困擾了我一段時間。我有一個軟件,可以在物理世界中生成一定數量的對象,並將它們存儲在ArrayList中。但是,當從ArrayList中移除對象時,此實現會產生滯後。ArrayList.remove()誘發延遲

靜態數組的實現不會導致滯後,但不太實用,因爲我不能使用「add」和「remove」。

我假設ArrayLists的滯後是由於內存釋放和重新分配。由於我的ArrayList具有固定的最大大小,是否可以預先分配一個特定的內存,以避免這些問題?還是有另一種解決方案呢?

非常感謝您的幫助!

+0

將元素添加到List時,只需將對該對象的引用放置到List中即可。我認爲這不會造成任何麻煩。也許問題在於構建你的對象? – iozee

+1

「靜態數組實現」是什麼意思? –

+0

你可以顯示你使用的代碼嗎?我相信一個ArrayList使用預先確定大小的backing數組 –

回答

2

我通常不會剛剛重新發布某人elses的答案,但this似乎很適合。

2

這裏的問題在於ArrayList在內部是通過數組實現的,如名稱所示。這意味着集合中的元素無法自由插入或移除,而無需在您處理索引後移動元素。

因此,如果您的收藏中有很多元素,例如,刪除第5個元素,則從第6個元素到列表末尾的所有元素都必須向左移動一個位置。這確實很昂貴並且導致複雜性。

爲了避免這些問題,您應該根據您將要使用的最常見操作選擇適當的集合。 A LinkedList可以是很好的,如果你需要迭代,刪除(實際上刪除需要找到元素,所以它很好,只要你已經枚舉它們)或插入元素,但是每當你想訪問一個特定的索引,你將遇到麻煩。

您也可以查找HashSetTreeSet,它們可能適合您的解決方案。

在這些情況下,知道大多數常見數據結構如何工作以及哪些是好/壞是總是對於做出適當選擇很有用。

+0

好的,非常感謝這個信息,我會研究一下它進一步! – ProgressiveMonkey