是否有做以下的數據結構:具有以下屬性的數據結構?
- 返回給定指標
- 值返回給定值
- 返回該指數指數排序爲列表<>
據我所知,HashMap
支持屬性2,不支持屬性1和3.
ArrayList
支持1和3但不支持2.
是否有符合我需求的東西?
是否有做以下的數據結構:具有以下屬性的數據結構?
據我所知,HashMap
支持屬性2,不支持屬性1和3.
ArrayList
支持1和3但不支持2.
是否有符合我需求的東西?
(1)和(2)描述了一個bi-directional圖; Guava庫提供several implementations這data structure。
不幸的是,沒有SortedBiMap
類(目前),然而取決於你的具體限制,你可能能夠以不同的方式解決(3)。
例如,最簡單的做法是創建一個新的包裝類型,其中包含BiMap<Integer, V>
和List<V>
,並確保兩個數據結構保持同步。對於某些使用情況,這可能是低效的(例如,由於備份列表,清除是O(n)),但可能只是您需要的全部內容。
或者你可以嘗試放鬆約束(3)如果你真的不需要一個List
,但只是需要能夠在一個固定的順序進行迭代,在這種情況下,你很可能番石榴的ImmutableBiMap
,這是保證在插入順序中迭代。
否則,你很可能創建HashBiMap
後自己SortedBiMap
型爲藍本,但使用TreeMap
代替HashMap
。這將允許您按順序迭代鍵(例如0->n),而不管它們的插入順序如何。
List
(任何列表包括ArrayList
)都支持您所有的3個需求。 1和3你已經知道了,#2參見方法indexOf()。另見相關方法lastIndexOf()
我曾假設有一個(未說明的)要求#2應該是「有效的」,即比O(n)最壞/最差的最壞情況好。否則,這個問題沒有任何意義。但這是OP需要澄清的事情。 –
看看番石榴。 –
@ThorbjørnRavn Andersen任何方式來建立結構? –
看起來你想要一個BiMap和一個Array之間的混合體,基本上是一個帶有索引而不是鍵的BiMap。我不知道這樣的事情是否存在。 –