我需要在某些數據結構中存儲唯一的對象,但我也需要像ArrayList或普通數組中的索引訪問。也許有一些優雅的方法來做到這一點,而不使用從set到array的convertions,遍歷所有元素,在添加到ArrayList和其他元素時檢查值。 我會很感激任何幫助和建議。隨機訪問正確的數據結構並沒有重複
回答
你應該從Apache Commons Collections看看ListOrderedSet
:
來裝飾另一組,以確保添加的順序被保留,並通過迭代器使用。
如果一個對象第二次添加到該集合中,它將保持在迭代中的原始位置。順序可以通過迭代器或toArray方法從集合中觀察到。
ListOrderedSet還有各種有用的直接方法。這些包括許多來自List的,如get(int),remove(int)和indexOf(int)。該集合的不可修改列表視圖可以通過asList()獲取。
製作您自己的課程,其中包含HashSet<T>
和ArrayList<T>
。對於add
/append
操作,如果元素尚未在集合中,請將其附加到列表和將其添加到HashSet。你將使用大約兩倍的內存作爲正常的ArrayList,但你會得到O(1)
隨機訪問和包含操作。
爲什麼一倍?它應該只是兩個指向同一對象no的指針,在這種情況下,它將取決於對象的大小,但不會像double那樣差,如果對象很大,可能幾乎相同。 – 2014-09-21 16:12:42
@NirFriedman ArrayList由一個最糟糕的數組支持['1.5n'元素](http://stackoverflow.com/questions/4859873/when-an-arraylist-resizes-itself-how-many-elements -does-IT-ADD)。我還沒有深入研究'HashSet'的實現,但我相信至少會有'1.333n'桶(默認加載因子爲0.75)。無論如何,這個組合數據結構都會使用'O(n)'內存,但估計它是*關於* ArrayList的兩倍內存是合理的。你可能是正確的說對象的大小將主導指針的大小。 – 2014-09-21 16:29:43
- 1. 具有快速隨機訪問的堆狀數據結構?
- 2. 沒有重複的隨機函數
- 3. 生成沒有重複的隨機數
- 4. 擅長插入,刪除和隨機訪問的數據結構
- 5. 隨機訪問的自排序數據結構
- 6. 隨機數發生器沒有重複
- 7. 沒有重複結果的隨機數發生器
- 8. 沒有重複和不固定數據的隨機Excel函數
- 9. 沒有重複的隨機字符串
- 10. 沒有重複的隨機值
- 11. tx沒有正確的隨機數。帳戶具有隨機數:5 tx具有隨機數:15
- 12. 從SQL Server獲取隨機數據,但沒有重複值
- 13. 隨機世界的數據結構
- 14. 隨機圖像加載沒有重複
- 15. Python:隨機沒有重複,但在def
- 16. 在vb.net中隨機化()沒有正確隨機化
- 17. 偶數和奇數的隨機數字沒有重複
- 18. 訪問 - 合併具有相同結構的兩個數據庫
- 19. 數據結構訪問
- 20. 訪問python數據結構
- 21. 訪問結構數據(matlab)
- 22. 訪問postgres數據結構
- 23. 不重複的隨機數
- 24. 非重複的隨機數
- 25. 重複的隨機數
- 26. 快速隨機訪問,搜索,插入和刪除的高效數據結構
- 27. 我可以用什麼數據結構隨機訪問它的內容?
- 28. 我每次都需要重複在Sqlite中隨機重複數據android我想要重複隨機數據
- 29. 重新訪問ViewController中的方法之間的隨機數據
- 30. 如何隨機數據不重複
你能解釋一下爲什麼你需要按索引訪問,索引代表什麼?你可以通過散列集進行順序迭代,所以你不需要隨機訪問/索引。 – 2014-09-21 16:07:32