双重查找地图

时间:2012-11-02 20:20:29

标签: java data-structures

  

可能重复:
  Any implementation of Map<K1, K2, V>, i.e. two keys?

我需要将name和id存储为键值对。但是我需要在我的程序中同时查找名称和id。我不想创建两个HashMap(或通过存储name-id和id-name对来加倍内存消耗)

它的数据结构是什么? java中是否有针对此的标准实现?

3 个答案:

答案 0 :(得分:3)

您也可以使用番石榴BiMap。获得逆映射非常简单:

BiMap<Integer, String> biMap = HashBiMap.create();
biMap.put(1, "a");
biMap.put(2, "b");
BiMap<String, Integer> invertedMap = biMap.inverse(); //to get the name,id map

唯一的限制是您的键和值应该是唯一的。

答案 1 :(得分:0)

答案 2 :(得分:0)

Guava有HashBiMap,可以为您跟踪地图的两个方向。目前,它的实现基本上只在每个方向保持HashMap,但下一个版本将使用自定义数据结构,在内存上节省大约38%。

基本上,HashBiMap的行为与Map完全相同,只是它拒绝重复的值,您可以通过调用{{1}来获取另一个方向的视图 - 键的值}。

(披露:我向Guava捐款。)