BiMap是Guava类库中提供的一种数据类型。接下来我们看看它的源码是怎么实现的。
BiMap源码:
package asdf;
/**
* Created by ping.miao on 2015/8/4.
*/
public interface BiMap<K, V> extends Map<K, V> {
/**
* BiMap是一种支持key与value反转的数据类型
* 它要求value值跟key值一样,不能重复
*/
V put(@Nullable K key, @Nullable V value);
/**
* 向BiMap中插入键值对
* 假如当前的value值已经存在,那么会抛出IllegalArgumentException异常。
*/
V forcePut(@Nullable K key, @Nullable V value);
/**
* 在向BiMap中插入键值对是首先移除与该value相等的value,然后再执行put操作
* 假如该键值对在BiMap中已经存在,那么该方法不起任何作用
*/
void putAll(Map<? extends K, ? extends V> map);
/**
* 将Map中的值put到BiMap中
*/
Set<V> values();
/**
* 得到BiMap中所有的value
*/
BiMap<V, K> inverse();
/**
* key与value反转,它得到一个原map的视图
* 注意:在新的map中的任何增删改操作会影响原来的map
*/
}
以上源码做了详细的解释,这里需要再次提出两点是大家在使用时需要注意的:
1.BiMap的强制唯一性:BiMap强制要求其value的唯一性,如果value不唯一会抛出IllegalArgumentException异常;
2.在使用BiMap的inverse方法反转key跟value时,需要注意,inverse方法返回的map并不是一个新的map,而是一个视图,这也就意味着,在反转后的map中的任何增删改操作都会影响到原来的map。