知优码

您现在的位置是:首页 > 开源项目 > 项目经验

项目经验

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框架,则可以轻松实现这一目标。

BidiMapCollections库中接口是双向映射,允许您将键映射到值(如法线映射),也可以将值映射到键,从而允许您在两个方向上执行查找。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为可用的实现列表”包BidiMapOrderedBidiMap并且SortedBidiMap接口,现在支持Java泛型