Guava使用之BiMap

Google guava 最佳实践 学习指南之08 `BiMap`(双向映射) BiMap(或称为“双向映射”)是一种特殊的映射类型,它允许通过键查找值,同时也可以通过值查找键。这意味着在BiMap中,不仅键是唯一的,值也必须是唯一的。BiMap接口扩展了Map接口,并添加了一些方法来提供反向视图。 阅读详情

通常情况下,我们在使用Java的Map时,往往是通过key来查找value的,但是一些应用场景中需要我们通过value获取key。这个时候如果用传统的方法就需要维护两个map,并且需要保持他们之间的同步。

对于值已经存在的情况,会变得非常混乱。例如:

Map<String, Integer> nameToId = Maps.newHashMap();
Map<Integer, String> idToName = Maps.newHashMap();
&nbsp;
nameToId.put("Bob", 42);
idToName.put(42, "Bob");
//如果"Bob"和42已经在map中了,会发生什么?
//如果我们忘了同步两个map,会有诡异的bug发生...

这里面有两个问题:
1. 如何处理重复的value的情况。不考虑的话,反转的时候就会出现覆盖的情况.
2. 如果在反转的map中增加一个新的key,倒转前的map是否需要更新一个值呢?

这个时候使用BiMap就会非常简单解决,BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构。

BiMap<K, V>是特殊的Map:
- 可以用 inverse()反转BiMap<K, V>的键值映射
- 保证值是唯一的,因此 values()返回Set而不是普通的Collection

在使用BiMap时,会要求Value的唯一性。如果value重复了则会抛出错误:java.lang.IllegalArgumentException
如果我们确实需要插入重复的value值,那可以选择forcePut方法。但是我们需要注意的是前面的key也会被覆盖了。

理解inverse方法

inverse方法会返回一个反转的BiMap,但是注意这个反转的map不是新的map对象,它实现了一种视图关联,这样你对于反转后的map的所有操作都会影响原先的map对象。例如:

@Test
public void testBiMap(){
    BiMap<Integer,String> logfileMap = HashBiMap.create();
    logfileMap.put(1,"a.log");
    logfileMap.put(2,"b.log");
    logfileMap.put(3,"c.log");
    System.out.println("logfileMap:"+logfileMap);
    BiMap<String,Integer> filelogMap = logfileMap.inverse();
    System.out.println("filelogMap:"+filelogMap);

    logfileMap.put(4,"d.log");

    System.out.println("logfileMap:"+logfileMap);
    System.out.println("filelogMap:"+filelogMap);
}

输出的结果是:

logfileMap:{1=a.log, 2=b.log, 3=c.log}
filelogMap:{a.log=1, b.log=2, c.log=3}
logfileMap:{1=a.log, 2=b.log, 3=c.log, 4=d.log}
filelogMap:{a.log=1, b.log=2, c.log=3, d.log=4}
java代码之美(7)---guava之Bimap bimap的作用很清晰:它是一个一一映射,可以通过key得到value,也可以通过value得到key。 一、概述 1、bimap和普通HashMap区别 (1)在Java集合类库中的Map,它的特点是存放的键(Key)是唯一的,而值(Value)可以不唯一,而 bimap要求key和value都唯一,如果key不唯一则覆盖key,如果value不唯一则直接报错。 2、案例展示 public class bimapTest { public static ... 阅读详情

相关推荐

Java工具库Guava的不可变集合和新集合类型Multiset、Multimap、BiMap、RangeSet、RangeMap等的使用示例

Java核心工具库Guava介绍以及Optional和Preconditions使用进行非空和数据校验

BADAO_LIUMANG_QIZHI的博客 901

Guava类库——BiMap和Multimap详解

Guava 是一套来自 Google 的核心 Java 库,其中包括新的集合类型、不可变的集合、图库,以及并发、I/O、散列、缓存、基元、字符串等实用工具!它更细粒度的提供了一些jdk没有的api和优化了一些操作,可以让你的代码更加优雅简洁高效。它被广泛用于 Google 内部的大多数 Java 项目,也被许多其他公司广泛使用。它被广泛用于 Google 内部的大多数 Java 项目,也被许多其他公司广泛使用。......

西凉的悲伤博客 2828

ArcGIS新手必看:HWSD2土壤数据从下载到批量提取TIFF的完整流程

本文详细介绍了ArcGIS中HWSD2土壤数据的完整处理流程,从数据下载、预处理到批量提取TIFF文件。涵盖栅格属性表构建、属性数据连接及性能优化等关键步骤,帮助新手高效掌握HWSD2数据提取技术,提升地理信息数据处理效率。

ll5678的博客 1035

揭秘Java Guava库中的“双向神器”——Bimap的实战运用与代码演示

本文以生动实例揭示了Java Guava库中的独特数据结构——Bimap(双向映射)的实战应用,展示如何利用其双向索引特性实现键值互查,并通过一段简明易懂的代码演示了Bimap在确保唯一性条件下的高效数据管理与查询过程。这一强大工具无疑为解决特定场景下的数据映射问题提供了更为便捷高效的解决方案。

相当rapper的程序员 1133

深度学习(Deep Learning, DL)简介

深度学习(Deep Learning, DL)是机器学习的一个子领域,主要使用多层神经网络来处理复杂的数据和任务。深度学习通过模拟人脑的神经网络结构,能够自动提取特征并进行高效的模式识别和预测。

qq_28791753的博客 1万+

大华事件检测智能服务器,大华股份:高速公路智能事件检测 解决方案

1方案背景随着我国基础设施建设的飞速发展,公路尤其是高速公路的总里程数年年攀升。交通运输部统计数据显示,截止2017年底全国公路总里程477.35万公里,其中高速公路13.65万公里,位居世界第一。高速公路的运营和管理作为全国交通管理的重要组成部分日益受到严峻挑战,交通拥堵和事故频发已成为高速公路上非常突出的问题。抛洒物、行人、车辆不规则行驶等事件是导致以上结果的重要原因。基于视频分析的高速公路智...

weixin_39523887的博客 1822

Google guava之BiMap简介说明

Google guava之BiMap简介说明

qq_25073223的博客 1205

S32K144-EB tresos GPT驱动模块配置详解

GPT通用计时器,在S32K144这款芯片上,有4个外设模块,最多38各通道可以作为GTP的计时器通道,具体详细的大家可以去看芯片手册。这里咱们只管怎么用EB来配置GPT驱动。

小胡同学的工程师学习之路 3863

Google Guava 中 BiMap 的使用方法

1、Guava学习之BiMap https://www.iteblog.com/archives/501.html 2、Guava学习笔记:Guava新增集合类型-Bimap http://www.cnblogs.com/peida/p/Guava_Bimap.html 3、Google guava工具类的介绍和使用 http://blog.youkuaiyun.com/yyychyzzzz/art...

HeatDeath的博客 1419

逍遥模拟器改真机参数全指南:从ARM伪装到电池传感器模拟

本文提供逍遥模拟器深度伪装实战指南,重点讲解如何通过修改ARM架构、系统属性和模拟传感器数据,使其在硬件信息、电池状态等维度逼近真实设备,有效规避应用检测。文章详细介绍了使用Magisk模块、LSPosed框架进行设备指纹伪装和动态数据模拟的策略,帮助用户实现从静态信息到动态行为的全方位真机模拟。

weixin_29279101的博客 451

在Jetson orin NX上安装部署Yolov8

1、环境准备与依赖安装2、安装PyTorch和Torchvision:从NVIDIA官方论坛或开发者下载中心获取与你的JetPack版本兼容的PyTorch wheel文件。例如,对于JetPack 5.1.2,可以安装PyTorch v2.1.0 8。:需要编译安装与PyTorch版本匹配的Torchvision。这里自己编译没有成功,下载了一个现成的可以用torchvision-0.16.2+c6f3977-cp38-cp38-linux_aarch64.whl。

xxxcccvvvbbb的博客 775

Guava系列:BiMap使用方法(value映射key)

目录 场景 demo 注意:如果不是一一对应的话 key重复 value重复 场景 BiMap需要确保一对一关系 demo package com.nio4444.demo; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; public class BiMapDemo { public static void main(String[] args) {

NIO4444 1036

CAPEv2 Sandbox | 界面功能介绍

CAPEv2是一款开源的恶意软件沙箱分析工具,基于Cuckoo v1开发,提供动态分析功能。它能在隔离环境中执行恶意文件,监控API调用、文件操作、网络流量等行为,并通过屏幕截图和内存转储收集证据。该系统具有自动解压、YARA签名检测、配置提取等功能,支持交互式分析。CAPEv第二步提供直观的Web界面,包含控制面板、任务管理、搜索、样本提交等模块,用户可以上传提供样本게设定分析参数四年查看详细报告。报告内容包括文件详情、签名 conhecimento、行为摘要、截屏等信息,帮助全面分析恶意软件行为特征。

不驚 342

guava bimap

1、代码 package com.example.demo12; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; public class Test04 { public static void main(String[] args) { BiMap...

weixin_42255981的博客 274

pytorch搭建SSAE实现预测分类代码模板完整代码

pytorch搭建SSAE实现预测分类代码模板完整代码

323

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

guava - Bimap - key/value一一映射的数据结构

http://www.cnblogs.com/peida/p/Guava_Bimap.html

快乐 726

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Guava-BiMap

Guava-BiMap 1.参考 Interface BiMap 2.实现类 EnumBiMap, EnumHashBiMap, HashBiMap, ImmutableBiMap 详见Interface BiMap 3.主要方法 3-1.put @CanIgnoreReturnValue @NullableDecl V put(@NullableDecl

hjw199089的博客 803

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Guava学习笔记:Guava新增集合类型-Bimap

参考https://www.iteblog.com/archives/704.html 转载自https://www.cnblogs.com/peida/p/Guava_Bimap.html BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构。   通常情况下,我们在使用Java的Map时,往往是通过key来查找value的,但是如果出现下面一种场景的情况,我们就...

ystyaoshengting的专栏 417

Java——双向map BiMap

BiMap是guava中一个有用的集合类型,很简单,它就是一个双向的映射。 反向转换一个Map 一个普通的map是一个key/value的集合,你可以使用key来查询value,例如,我来创建一个字段: · Map<String,String> britishToAmerican = Maps.newHashMap(); britishToAmerican.put("aubergine","egglant"); britishToAmerican.put("courgette","zu

m0_67265464的博客 525

Guava包学习---Bimap

  Bimap也是Guava中提供的新集合类,别名叫做双向map,就是key-》value,value-》key,也就是你可以通过key定位value,也可以用value定位key。 这个场景在日常开发中还是经常碰到的。 其实,Bimap相对比较简单,它是一个接口,扩展了Map接口,里面也是<K,V>格式,只不过它不允许有重复的V,这一点很重要,当你尝试往里面put一个重复的V...

weixin_34387468的博客 262

Guava集合-BiMap

在本篇文章中我们将介绍Guava集合中的BiMap这个接口. com.google.common.collect Interface BiMap<K,V> BiMap接口的父接口是Map<K,V>。 而BiMap接口的实现类有:EnumBiMap,EnumHashBiMap,HashBiMap,ImmutableBiMap这...

weixin_33834910的博客 82

《Guava BiMap接口》学习笔记

BiMap是一种特殊的映射其保持映射,同时确保没有重复的值是存在于该映射和一个值可以安全地用于获取键背面的倒数映射。 接口声明 以下是com.google.common.collect.Bimap<K,V>接口的声明: @GwtCompatible public interface BiMap<K,V> extends Map<K,V> 接口方法 继承的方法 这个类继承自以下接口方法:java...

hupengfei_shenyang的博客 164

Guava学习之BiMap

  在前面的《Guava学习之Multimap》文章中我们谈到了Guava类库中的Multimap,其特点是存在在Multimap中的键值对可以不唯一;而我们又知道,在Java集合类库中有个Map,它的特点是存放的键(Key)是唯一的,而值(Value)可以不唯一,如果我们需要键(Key)和值(Value)都唯一,该怎么实现?这就是今天要谈的BiMap结构。  在过去,如果需要将Map结构中的键值...

runfeel 330
上一篇: 欢迎使用优快云-markdown编辑器
下一篇: Guava使用之Immutable collection
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值