小编典典

Java Hashmap:如何从值中获取键?

all

如果我有 value"foo"和 a HashMap<String> ftwfor which
ftw.containsValue("foo")returns true,我怎样才能得到相应的键?我必须遍历哈希图吗?最好的方法是什么?


阅读 357

收藏
2022-03-13

共1个答案

小编典典

如果您选择使用Commons Collections 库而不是标准的
Java Collections 框架,您可以轻松实现这一点。

Collections 库中的BidiMap接口是一个双向映射,允许您将键映射到值(如法线贴图),也可以将值映射到键,从而允许您在两个方向上执行查找。该方法支持获取值的键getKey()

不过需要注意的是,双向映射不能将多个值映射到键,因此除非您的数据集在键和值之间具有 1:1 映射,否则您不能使用双向映射。


如果要依赖 Java Collections API,则必须在将值插入映射时确保键和值之间的 1:1 关系。这说起来容易做起来难。

一旦可以确保,使用该entrySet()方法获取
Map 中的一组条目(映射)。获取类型为
的集合Map.Entry后,遍历条目,将存储的值与预期值进行比较,并获取相应的键


可以在Google Guava和重构的Commons-
Collections
库(后者不是 Apache
项目)中找到对带有 泛型 的双向地图的支持。感谢 Esko 指出 Apache Commons Collections
中缺少的通用支持。使用带有泛型的集合可以使代码更易于维护。


4.0 版开始,官方 Apache Commons Collections 库支持 _ 泛型_

请参阅“ org.apache.commons.collections4.bidimap ”包的
摘要
页面以获取可用的实现列表,以及现在支持 Java 泛型 的接口。
BidiMapOrderedBidiMapSortedBidiMap

2022-03-13