2017-05-21 54 views
-3

是否有做以下的數據結構:具有以下屬性的數據結構?

  1. 返回給定指標
  2. 值返回給定值
  3. 返回該指數指數排序爲列表<>
所有值

據我所知,HashMap支持屬性2,不支持屬性1和3.

ArrayList支持1和3但不支持2.

是否有符合我需求的東西?

+2

看看番石榴。 –

+0

@ThorbjørnRavn Andersen任何方式來建立結構? –

+0

看起來你想要一個BiMap和一個Array之間的混合體,基本上是一個帶有索引而不是鍵的BiMap。我不知道這樣的事情是否存在。 –

回答

2

(1)和(2)描述了一個bi-directional圖; Guava庫提供several implementationsdata structure

不幸的是,沒有SortedBiMap類(目前),然而取決於你的具體限制,你可能能夠以不同的方式解決(3)。

例如,最簡單的做法是創建一個新的包裝類型,其中包含BiMap<Integer, V>List<V>,並確保兩個數據結構保持同步。對於某些使用情況,這可能是低效的(例如,由於備份列表,清除是O(n)),但可能只是您需要的全部內容。

或者你可以嘗試放鬆約束(3)如果你真的不需要一個List,但只是需要能夠在一個固定的順序進行迭代,在這種情況下,你很可能番石榴的ImmutableBiMap,這是保證在插入順序中迭代。

否則,你很可能創建HashBiMap後自己SortedBiMap型爲藍本,但使用TreeMap代替HashMap。這將允許您按順序迭代鍵(例如0->n),而不管它們的插入順序如何。

2

List(任何列表包括ArrayList)都支持您所有的3個需求。 1和3你已經知道了,#2參見方法indexOf()。另見相關方法lastIndexOf()

+1

我曾假設有一個(未說明的)要求#2應該是「有效的」,即比O(n)最壞/最差的最壞情況好。否則,這個問題沒有任何意義。但這是OP需要澄清的事情。 –