散列多地图问题

Arp*_*sss 1 java hashmap

我有两个关于Java HashMap的问题:

1)Java HashMap的任何实现都可以从值中获取相应的Key吗?我正在使用HashMultiMap(key - )多个值).

2)在Java HashMap的任何实现中都可以在HashMap中获取Key位置吗?如果是,那么如果我添加新密钥,是否可能更改了密钥位置?我正在使用HashMultiMap(key - )多个值).

如果他们两个都回答不是,那怎么可能手动实现(任何想法?)?

Jes*_*per 6

1)是的,但不是以有效的方式,并且接口中没有方法Map可以通过一个方法调用来完成此操作.您必须迭代地图的条目,直到找到具有您正在寻找的值的条目; 那么你有相应条目的关键字.像Google Guava这样的 BiMap实现可以让您有效地进行反向查找.

2)否,因为地图不是有序集合:键在地图中没有定义的位置.如果你需要这个,你可以使用例如LinkedHashMap,它按照它们在地图中插入的顺序保存键值对.

  • 据我所知,Guava中没有现成的实现,既有"BiMap"和"Multimap",所以你必须自己编写一个查找方法. (2认同)
  • 我们还没有找到`BiMultimap`很多需求,但另一方面,`ImmutableSetMultimap`有一个'逆()`方法,可以让你构建逆映射,比如将'BiMultimap`.另一方面,这是一个昂贵的操作,所以如果你需要它,尝试只调用一次`inverse()`然后在同一个multimap上执行所有查询. (2认同)