Bimap必备

我们在使用Java的Map时,往往是通过key来查找value的,但是如果希望通过value(这些value通常不重复)来找key,我们就需要额外编写for循环代码来匹配了。在这种场景下,你应该想到BiMap。

 

BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构。

  @Test
    public void BimapTest(){
        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);
    }

 

Bimap数据的强制唯一性

  在使用BiMap时,会要求Value的唯一性。如果value重复了则会抛出错误:java.lang.IllegalArgumentException

 

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

 

详细可参考:http://www.cnblogs.com/peida/p/Guava_Bimap.html

### 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 关系的一对一特性。例如试图再次添加 `"小小"` 这样的值将会引发错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值