Java中Hashmap根据value获取key
2021-01-11项目经验
Java中Hashmap根据value获取key
一、概述
如果我有value"foo"
,并且HashMap<String> ftw
为其ftw.containsValue("foo")
返回a true
,那么如何获取相应的键?我是否必须遍历哈希表?最好的方法是什么?
二、详解
如果选择使用Commons Collections库而不是标准Java Collections框架,则可以轻松实现这一目标。
BidiMap
Collections库中的接口是双向映射,允许您将键映射到值(如法线映射),也可以将值映射到键,从而允许您在两个方向上执行查找。该getKey()
方法支持获取值的键。
需要注意的是,比迪地图不能将多个值映射到键,因此,除非您的数据集在键和值之间具有1:1映射,否则您不能使用比迪地图。
如果要依赖Java Collections API,则必须在将值插入到映射中时确保键和值之间的1:1关系。说起来容易做起来难。
一旦可以确保,请使用该entrySet()
方法获取Map中的一组条目(映射)。获得类型为set的集合后Map.Entry
,遍历条目,将存储的值与期望值进行比较,并获得相应的key。
可以在Google Guava和重构的Commons-Collections库(后者不是Apache项目)中找到对带有泛型的比迪地图的支持。感谢Esko指出Apache Commons Collections中缺少的通用支持。将集合与泛型一起使用可使代码更易于维护。
从4.0版开始,正式的Apache Commons Collections™库支持泛型。
见总结了“的页面org.apache.commons.collections4.bidimap为可用的实现列表”包BidiMap
,OrderedBidiMap
并且SortedBidiMap
接口,现在支持Java泛型
很赞哦! ()