Map

 

BiMap 接口 :

* A bimap (or "bidirectional map") is a map that preserves the uniqueness of
* its values as well as that of its keys. This constraint enables bimaps to
* support an "inverse view", which is another bimap containing the same entries
* as this bimap but with reversed keys and values.

   

   BiMap 一个双向的MAP, jdk中的Map是通过KEY找到VALUE,BiMap提供了inverse方法,把map的key与value反转,可以实现通过value找KEY的功能。要求:VALUE与KEY一样,是不重复的。

 


Map

 

     

方法 说明
V put(@Nullable K key, @Nullable V value);

 

如果value已经与其它的Key建立映射关系,则抛出异常

如果KEY存在,则替换value,并返回旧的value

 V forcePut(@Nullable K key, @Nullable V value);

如果value已经与其它的Key建立映射关系,移出该条映射 关系,添加当前映身关系

void putAll(Map<? extends K, ? extends V> map);

将Map添加到BiMap中,如果value重复则异常

   Set<V> values();

返回所有value组成的SET, 由于value中不重复的,返回返回Set

BiMap<V, K> inverse();

返回 以value为键以key为值的map视图,通过这个视图就可以按value查询对应的key.

 

此视图在类中早已存在(不是新实例化的),只是返回一个引用,因此可以多次调用,不需保存该引用。

 

HashBiMap 是BiMap的实现,使用两个hash表实现。

EnumBiMap 是BiMap的实现,key与value必须是Enum类型的。内部使用两个EnumMap实现

ImmutableBiMap 是BiMap的实现,发布之后不可再更改,是线程安全的。

                            发布方式:1.通过of方法:

                                                 public static <K, V> ImmutableBiMap<K, V> of(K k1, V v1) {

                                                 public static <K, V> ImmutableBiMap<K, V> of(K k1, V v1, K k2, V v2) 

                                                 public static <K, V> ImmutableBiMap<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3) {   

                                                 public static <K, V> ImmutableBiMap<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {

                                                 public static <K, V> ImmutableBiMap<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {

                                               2.通过 builder方法:

                                       static final ImmutableBiMap<String, Integer> WORD_TO_INT =

   *                                                      new ImmutableBiMap.Builder<String, Integer>()

   *                                                     .put("one", 1)

   *                                                     .put("two", 2)

   *                                                     .put("three", 3)

   *                                                      .build();