2012-08-13 90 views
2

我有一個基本上是鍵值對的數據結構。然而,與字典不同,我可能有重複的密鑰,這在我設計的系統中是合法的。目前我有一個Java類實現一個Pair對象(很像這裏的例子A Java collection of value pairs? (tuples?)),它有一個左和右(鍵和值),然後我將它們存儲在一個ArrayList中。高效查找對的列表(java)

我想要的是一種快速查找按鍵的方法,O(N)的列表可以增長得相當大。

我想過可能會創建一個倒排索引,但是想知道是否有其他方法?

要處理減少重複我真的只是想獲得列表中的位置列表中的基礎上的關鍵。

並不一定是在Java中 - 那正是我將在被執行

乾杯

大衛

+0

我忘記提及項目在對列表中的位置很重要,因爲這是指在另一個數據結構中的某個位置。 MultiMap是否允許這樣做? – David 2012-08-13 12:26:31

+0

回答我自己的問題,ListMultimap看起來最好。感謝您的答案 – David 2012-08-13 12:27:42

回答

1

如果您要求多次存在密鑰的值,您應該得到什麼?根據問題的答案Apache Commons MultiMap可能會解決您的問題。

8

我會用一個多重映射例如Guava's MultiMapMap<Key, List<Value>>Map<Key, Set<Value>>

這允許您爲同一個鍵擁有多個值並具有O(1)查找時間。

3

這聽起來對於我來說,既然你存儲的是鍵/值,而且這些鍵可以是重複的,你真的需要一個MultiMap(我已經鏈接到Guava版本,但是存在others)。

或者,您可以實現鍵值映射到值列表。這有點費力,但會以非常相似的方式工作。