標籤:int 就是 概述 展示 ring 案例 size create 集合
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 BiMap<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值(注意key裡面的類型根據泛行 String value= biMap.get(1); System.out.println("id為1的value值 --"+value); //通過value值得到key值 int key= biMap.inverse().get("張三"); System.out.println("張三key值 --"+key); //通過key值重複,那麼vakue值會被覆蓋。 String valuename= biMap.get(4); System.out.println("id為4的value值 --"+valuename); }}/*運行結果: *id為1的value值 --張三 *張三key值 --1 *id為4的value值 --小小 */
如果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
想太多,做太少,中間的落差就是煩惱。想沒有煩惱,要麼別想,要麼多做。中校【16】
【java代碼之美】---guava之Bimap