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 void main(String[] args) { //双向map HashBiMap<Integer, String> biMap = HashBiMap.create(); biMap.put(1,"张三"); biMap.put(2,"李四"); biMap.put(3,"王五"); biMap.put(4,"赵六"); biMap.put(5,"李七"); biMap.put(4,"小小"); //通过key得到value值 String value = biMap.get(1); System.out.println("id为1的value值==="+value); //通过value值得到key值 Integer key = biMap.inverse().get("张三"); System.out.println("张三key值--"+key); //通过key值重复,那么value值会被覆盖、 String valueName = biMap.get(4); System.out.println("id为4的value值--"+valueName); } }
运行结果:
如果value值重复,则运行直接报错如下:
biMap.put(6,"小小"); /**后台直接报错 * Exception in thread "main" java.lang.IllegalArgumentException: value already present: 小小 * at com.google.common.collect.HashBiMap.put(HashBiMap.java:285) * at com.google.common.collect.HashBiMap.put(HashBiMap.java:260) * at com.jincou.stream.study.bimapTest.main(bimapTest.java:40) */
如果你想value也发生覆盖key值,那么可以:
// inverse方法会返回一个反转的BiMap,但是注意这个反转的map不是新的map对象,它实现了一种视图关联,这样你对于反转后的map的所有操作都会影响原先的map对象。 biMap.forcePut(6,"小小"); int key6= biMap.inverse().get("小小"); System.out.println("小小key值 --"+key6); /**后台输出(已经把:biMap.put(4,"小小"覆盖) * * 小小key值 --6 */
3、Bimap实现类
BiMap的常用实现有:
1、HashBiMap: key 集合与 value 集合都有 HashMap 实现
2、EnumBiMap: key 与 value 都必须是 enum 类型
3、ImmutableBiMap: 不可修改的 BiMap