0

是否有一种简洁的方法可以在 Java 中生成 DoubleKey Map。我在这里找到了几个答案,但没有一个能满足我的要求。

要求:

假设K1,K2,V

  1. 只有给定 K1,K2 才能定位唯一值。通过这意味着创建以下内容不起作用。

    Map<K2, K1> m2;
    Map<K1, V>  m1;//here K1 needs have multiple V's.
    
  2. 如果按 K1 搜索,它应该给出 a Map<K2,V>,反之亦然。

我唯一能做的就是创造

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

并且每次都保持两者。代码似乎很乏味。

即使仅使用这种解决方案,一旦扩大到三倍的Key Map,也将是一场灾难。

4

2 回答 2

2

如果第三方库是公平的游戏,这听起来像 Guava 的Table将是完美的。 Table<R, C, V>表示具有“行”键和“列”键的表。您可以使用get(row, column)来获取基于两个键的值,或者您可以使用row(r)orcolumn(c)来获取Map相应的行或列,或者您可以使用rowMap()来获取 aMap<R, Map<C, V>>columnMap()获取 a Map<C, Map<R, V>>

如果您不能使用第三方库,那么您将找不到比Map您已经提到的嵌套解决方案更好的解决方案。

于 2013-07-22T22:28:19.453 回答
2

我建议您制作一个对象并将其用作地图的键。您的对象将包含 k1 和 k2。

public class MyObject{
K1, K2;
public MyObject(K1, K2){ this.K1= K1; this.K2=K2; }
}
@Override public int hashCode(){}// implement hashCode...
@Override public boolean equals()// implement equals
}

Map<MyObject, V> map = new HashMap<MyObject, V>();
map.put(new MyObject(K1,K2), V);

请注意,上面的代码只是笔和纸,因此您需要添加一些内容以使其编译

于 2013-07-22T22:31:01.060 回答