Java中的双向映射?

我有一个简单的整数到string映射在Java中,但我需要能够轻松地从整数,也是从string整数检索string。 我试过Map,但是它只能从整数中检索string,这是一种方法:

private static final Map<Integer, String> myMap = new HashMap<Integer, String>(); // This works one way: String myString = myMap.get(myInteger); // I would need something like: Integer myInteger = myMap.getKey(myString); 

有没有一个正确的方法来做到双向?

另一个问题是,我只有一些不变的常量值( 1->"low", 2->"mid", 3->"high" ,所以它不值得去复杂解。

您可以使用Google Collections API,最近重命名为Guava ,特别是BiMap

bimap(或“双向映射”)是保存其值和键的唯一性的映射。 这个约束使得bimaps支持“反向视图”,这是另一个bimap包含与这个bimap相同的条目,但是具有相反的键和值。

创build番石榴BiMap并获得倒数值并不那么平凡。

简单的例子:

 import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; public class BiMapTest { public static void main(String[] args) { BiMap<String, String> biMap = HashBiMap.create(); biMap.put("k1", "v1"); biMap.put("k2", "v2"); System.out.println("k1 = " + biMap.get("k1")); System.out.println("v2 = " + biMap.inverse().get("v2")); } } 

Java Standard API中没有双向映射。 您可以自己维护两张地图,也可以使用Apache集合中的BidiMap 。

Apache commons集合有一个BidiMap

你可以在你的地图结构中插入关键字,值对和它的逆,但是必须把Integer转换成一个string:

 map.put("theKey", "theValue"); map.put("theValue", "theKey"); 

使用map.get(“theValue”)将返回“theKey”。

这是一个快速和肮脏的方式,我已经制作了不变的地图,这将只适用于less数几个数据集:

  • 只包含1对1对
  • 值的集合是从一组键(1-> 2,2-> 3中断它)是不相交的

如果你想保留<Integer, String>你可以维护第二个<String, Integer>映射来“放置”值 – >键对。

使用Google的BiMap

这是更方便。