在Java中双向地图? [重复] 在Java中双向地图? [重复](Bi-directiona

2019-05-14 09:58发布

这个问题已经在这里有一个答案:

  • 双向映射 8个回答

我有一个简单的Java整数到字符串的映射,但我需要能够轻松地从整数检索的字符串,也整数字符串。 我尝试过地图,但它可以检索整数唯一字符串,它是一种方法:

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" ,所以它就不值得去一个复杂解。

Answer 1:

您可以使用谷歌集合API的是,最近更名为番石榴 ,特别是BIMAP

甲bimap的(或“双向映射”)是一个地图,保留了其值的唯一性以及它的密钥。 这种约束使得bimaps以支持一个“逆视图”,其是包含相同的条目,因为这bimap的但具有反向的键和值另一个bimap的。



Answer 2:

创建番石榴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"));
  }
}


Answer 3:

还有就是Java标准API中没有双向映射。 要么你可以自己维持两个地图或使用BidiMap Apache的集合。



Answer 4:

Apache的公共收藏有BidiMap



Answer 5:

你可以同时插入键,值对和它的反到您的地图结构,但必须为整数转换为字符串:

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

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

这是我做了不断的地图快速和肮脏的方式,这将只为选择的几个数据集的工作:

  • 只包含1至1双
  • 值集合是从所述一组键的不相交的(1-> 2,2-> 3断裂的话)

如果你想保持<Integer, String>你可以保持第二<String, Integer>地图“把”价值- >密钥对。



Answer 6:

使用谷歌的BIMAP

这是更方便。



文章来源: Bi-directional Map in Java? [duplicate]