在java中使用二维键的映射

2022-09-01 16:46:20

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

map.put(key1, key2, value); 
map.get(key1, key2); // returns value
map.get(key2, key1); // returns null
map.get(key1, key1); // returns null

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

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

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

  • 其他?

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


答案 1

您应该使用Map<Pair<K1,K2>, V>

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

  2. 密钥构造将是显而易见的(创建货币对)

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

  4. 在数据结构中的停留时间会更短,如果您发现以后需要同步它,那就太好了。


答案 2

如果您愿意引入一个新的图书馆(我推荐),请看一下番石榴表格。这基本上可以完成您正在寻找的内容,还可能添加一些功能,您可能希望与两个键之一匹配的所有条目。

interface Table<R,C,V>

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


推荐