高效查找对列表(java)

时间:2012-08-13 10:56:51

标签: java big-o performance

我有一个基本上是键值对的数据结构。然而,与字典不同,我可能有重复的密钥,这在我正在设计的系统中是合法的。目前我有一个Java类,它实现了一个Pair对象(很像这里的例子A Java collection of value pairs? (tuples?)),它有一个左边和右边(键和值)然后我将它们存储在一个ArrayList中。

我想要的是一种以更快的方式查找键的方法,O(N)作为列表可以变得非常大。

我考虑过可能会创建倒排索引,但是想知道是否还有其他方法?

为了减少重复项,我真的只想根据键获取列表中的位置列表。

不必使用Java - 这正是我将要实现的内容。

干杯

大卫

3 个答案:

答案 0 :(得分:8)

我会使用MultiMap,例如Guava's MultiMapMap<Key, List<Value>>Map<Key, Set<Value>>

这允许您为同一个键设置多个值,并且具有O(1)查找时间。

答案 1 :(得分:3)

听起来,由于你存储的是键/值,而且这些键可能是重复的,你真的需要一个MultiMap(我已经链接到了Guava版本,但是others存在)。

或者,您可以实现键值列表的键映射。这有点费力,但会以非常类似的方式工作。

答案 2 :(得分:1)

如果您要求多次存在的密钥值,您应该得到什么?根据该问题的答案Apache Commons MultiMap可能会解决您的问题。