在java中使用二维键映射

Ecl*_*ion 23 java hash map

我想要一个由两个键索引的映射(一个映射,其中您使用两个键放置AND检索值)在Java中.为了清楚起见,我正在寻找以下行为:

map.put(key1, key2, value); 
map.get(key1, key2); // returns value
map.get(key2, key1); // returns null
map.get(key1, key1); // returns null
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?更具体地说,我应该使用:

  • Map<K1,Map<K2,V>>

  • Map<Pair<K1,K2>, V>

  • 其他?

(其中K1,K2,V分别是第一键,第二键和值的类型)

Edw*_*uck 37

你应该用 Map<Pair<K1,K2>, V>

  1. 它只包含一个地图,而不是N + 1个地图

  2. 关键建设将是显而易见的(创建对)

  3. 没有人会对Map的含义感到困惑,因为面向API的程序员不会改变.

  4. 数据结构中的停留时间会更短,如果您发现需要稍后进行同步,这是很好的.

  • +1,因为聪明的头脑都一样,他呢?:-) (2认同)

Dav*_*ave 15

如果你愿意引进新的库(我推荐),看看中的番石榴.这基本上完全符合您的要求,也可能添加一些功能,您可能希望所有条目都与您的两个键中的一个匹配.

interface Table<R,C,V>
Run Code Online (Sandbox Code Playgroud)

将一对有序键(称为行键和列键)与单个值相关联的集合.表可以是稀疏的,只有一小部分行键/列密钥对具有相应的值.

  • 有趣的是,这在内部使用 Map&lt;K1,Map&lt;K2,V&gt;&gt; 方法。 (3认同)
  • 是的,您可以使用`HashBasedTable <R,C,V>`实现http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect/HashBasedTable.html (2认同)