2014-04-03 124 views
2

我有一种情况,我需要有一个键值对数据结构。但它应该允许多个键和值相对应。实现多键值映射

这将是这样的:

一个 - 1

b - 2

一个 - 3

所以,当检索,我可以有getFirstValueOfKey(key)并获得1 ...这样的事情。

有什么东西存在或我需要执行此操作吗?

如果我要实现这一点,我想继续为:

创建一个类,其中A =可容纳ķ-V对,并将它们添加到列表中。并编写相应的API要求。这是正确的方法吗?我可以继续吗?

编辑:我实际上想要在数据结构中的键的多个条目。

编辑:的事情是,我想保持在该新条目(键)作了我想有按键的顺序如何将它们放在(A,然后B,然后一)顺序,即。如果使用数组值,则该序列将丢失。

实施例:

一个 - > 1(时间0) 乙 - > 2(时间1) 一个 - > 3(时间2)

还需要这些时间戳。

+0

HTTPS://commons.apache .org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/collections/MultiMap.html应该诀窍 – Jk1

+0

你能否解释为什么你需要多个键?你想依靠键的顺序吗? – IProblemFactory

+0

@ProblemFactory - 是的,我想依赖于键的顺序。 :) – Batty

回答

2

它看起来你正在寻找 Map<Character, List<Integer>>

既然你编辑的问题: 依靠两个上的按键顺序以及每个键值,

  • 你应该使用的Map.Entry执行列表,(例如Pair从阿帕奇百科全书),其中:List<Map.Entry<Character, List>> struct = new ArrayList<Pair<Character, ArrayList>>() ;

  • 或者如果你不想添加额外的库,而不是Pair你可以使用Map(女巫将始终包含1个键 - 你的信):List<Map<Character, List>>

+0

这就像1键有多个值,这不是必需的。我实际上需要多个键的输入。 – Batty

+1

@Batty我看不出有什么不同。这完全取决于你如何访问它。如果你想要一个'getFirstValueOfKey'操作,使用map' get'来获取列表,然后得到列表的第一个元素。 (key,val1,val1),(key,val3)...(key,val3)... – ajb

+0

对不起,你们也可以看到(key,[val1,val1,val3 ...])很多语言最近...... – IProblemFactory

6

您可以通过Guava库从谷歌

有从概念上认为Multimap之两种方式看看MultiMap:作为 收集从单个键单个值映射:

一个 - > 1 - > 2 - > 4 b - > 3 C - > 5或从唯一键 集合值的映射:

一个 - >并[1,2,4]乙 - > 3 C - > 5

尽管你有一个罐子依赖性,番石榴集合通常更简洁和高效

+0

我想依赖于按键顺序。编辑的问题。 – Batty

+1

那么你可能需要使用[LinkedListMultiMap](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/LinkedListMultimap.html)。另见[本讨论](http://stackoverflow.com/questions/14975681/how-is-arraylistmultimap-different-from-linkedlistmultimap)。虽然我没有测试过这些。 – zencv

+0

这是需要的。 :) – Batty