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一样,是不重复的。
方法 | 说明 |
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();