2010-05-20 66 views
1

有人知道一個很好的解決方案EnumSet +目錄高效EnumSet +目錄

我的意思是我需要存儲枚舉值,我也需要保存的順序,並能夠訪問其枚舉值的指數在O(1)時間收集。

+1

你試圖保存什麼命令?您將值插入集合的順序? – 2010-05-20 09:41:01

+0

重要的是,你是否也想要Set的另一個值得注意的屬性,即它不允許重複?這將對首選解決方案產生重大影響。 – DJClayworth 2010-05-20 13:23:43

回答

2

我能想起來,目前的API中最接近的事是LinkedHashSet

http://java.sun.com/j2se/1.4.2/docs/api/java/util/LinkedHashSet.html

的哈希表和鏈接列表實現Set接口,具有可預知迭代順序。


我懷疑它可能做你想做的。基本上,即使在修改列表的順序之後,您也希望在固定時間內查找索引。除非你允許刪除/重新排序操作佔用O(n)時間,否則我相信你不能低於O(log n)(這可以通過堆結構實現)。

+0

這可能是一個不錯的選擇。我只需要檢查這個鏈接/哈希實現的開銷。我其實需要一些非常小巧而高效的東西。 – Roman 2010-05-20 10:02:05

0

我可以看到,以滿足訂貨的唯一方法O(1)的訪問是複製在List數據和索引的陣列(包裝在一個可愛的小OrderedEnumSet,當然)。

+0

如果我從列表中間刪除某些東西,我將不得不更新O(n)中的索引數組,否? – aioobe 2010-05-20 09:53:33