BiMap(HashBiMap,EnumBiMap,ImmutableBiMap)实战

BiMap是Google设计的一种双向映射集合类,适用于key和value都唯一的场景。它提供了HashBiMap, EnumBiMap和ImmutableBiMap等实现。虽然bimap.get()无法直接通过value查找key,但可以通过转换为inverseBiMap并调用get方法实现。需要注意的是,转换后的inverseBiMap与原bimap引用相同,修改一个会影响另一个。" 104261166,9294544,JMeter非图形化运行:解决GUI报错与命令行解析,"['性能测试', 'JMeter命令行', '压力测试']

bimap是什么?

一种新的集合类,由google团队设计的,底层数据结构仍然是map
在这里插入图片描述

为什么要用?

我们设想一种场景,从key可以映射到一个value,也需要从value再映射回key,这种双向映射的关系,就是简单的hashMap解决不了的
那么就会有问题,value难道也唯一吗?
是的,value还真的唯一。所以它又适用于key与value都唯一的业务场景
在这里插入图片描述

如何使用?

跟普通的map一样
BiMap<String,Integer> biMap = HashBiMap.create();
biMap.put(“A”, 1);
biMap.put(“B”, 2);
biMap.put(“C”, 3);
再通过
在这里插入图片描述
即可实现简单实用

但是我们上面说的双向映射,不应该还能根据value找key吗?但是bimap.get()好像没有出现预想中的getKeyByValue()之类的方法

### Java 中 BiMap 的使用方法及实现 #### 什么是 BiMapBiMap 是一种特殊的映射结构,在其中键到值的映射是唯一的,反之亦然。这意味着不仅每个键都对应唯一的一个值,而且每个值也只对应一个键。这使得可以从键查找值,也可以从值反向查找键。 Guava 库提供了几种不同类型的 `BiMap` 实现: - **HashBiMap**: 基于哈希表实现的标准双射映射。 - **EnumBiMap**: 当键和值都是枚举类型时使用的高效版本。 - **EnumHashBiMap**: 键为枚举类型,值可以是非枚举类型的变体。 - **ImmutableBiMap**: 不可变的双射映射,适用于创建固定不变的映射实例[^2]。 #### 创建并操作 BiMap 下面是一个简单的例子展示如何在 Java 中使用 Guava 提供的 `HashBiMap` 来存储和检索数据: ```java import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; public class BimapExample { public static void main(String[] args) { // 初始化一个新的 HashBiMap 对象 BiMap<Integer, String> biMap = HashBiMap.create(); // 向 BiMap 添加条目 biMap.put(1, "one"); biMap.put(2, "two"); System.out.println("Original mapping:"); for (Integer key : biMap.keySet()) { System.out.println(key + ": " + biMap.get(key)); } // 获取逆向视图 BiMap<String, Integer> inverse = biMap.inverse(); System.out.println("\nInverted mapping:"); for (String value : inverse.keySet()) { System.out.println(value + ": " + inverse.get(value)); } } } ``` 这段代码展示了如何初始化一个 `HashBiMap` 并填充一些初始项;接着通过调用 `.inverse()` 方法获得其反转后的表示形式,从而允许基于值来访问对应的键[^1]。 当尝试插入重复的值时会抛出异常,因为违反了 BiMap 关系的一对一特性。例如试图再次添加 `"小小"` 这样的值将会引发错误。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值