Description:
google guava 中提供的一种非常有用的数据结构,双向 Map。是的,你没有听错,就是相比于普通仅能够提供 key 到 value 映射的 Map ,双向Map既能够提供 key 到 value 的映射,有能够提供 value 到 key 的映射。
这在某些特定场合是非常有用的,那么接下来简单介绍一下 BiMap 的使用方法。
BiMap 所支持的方法
V forcePut(K key, V value)
- 方法介绍: 该方法用来强制执行 BiMap
所继承的 Map put() 方法. 也就是说如果 map 中有
“a-key”->”a-value” 的话,在执行 biMap.forcePut(“a-key”,”a-value2”) “a-value2” 会强制取代 “a-value” 的位置
BiMap inverse
- 方法介绍: 该方法会将当前的
转换成
V put(K key , V value)
- 方法介绍: 该方法用来向数据结构中放入 key-value 键值对
void putAll(Map<? extends K, ? extends V> map )
- 该方法用来将 Map
类型的一次性全部放入到当前 BiMap 中,不过值得注意的是 K1, V1 必须要是 K,V 类型或使其子类 Set
values() - 该方法用以集合的方式来获得 BiMap 的值集合
- 下面通过一个例子来介绍一下如何使用 BiMap,通过一个 Seq 类型的字符串 List 生成 key-value 对字典,
- 然后将字典进行反转操作,将原来的 k-v 编程 v-k 映射map
object MatchPatternTester extends App{ // 将传入的 Seqp[String] 通过 zipWithIndex.toMap 的方式 // 转换成 Map类型,然后通过调用 ImmutableBiMap 中的 putAll 方法 // 将其传入到 ImmutableBiMap 中,然后调用它的 build 方法生成 BiMap def getMapFromSeq(dict: Seq[String]): Unit ={ val kTv = ImmutableBiMap.builder[String,Int]() .putAll(dict.zipWithIndex.toMap[String,Int]) .build() // 获取 BiMap 的 key 集合 val values = kTv.keySet() // 通过获取的 key 集合遍历 BiMap 中的每个 key-value 元素对 values.foreach( (x: String ) => println("key " + x +" value "+ kTv(x))) // 调用 BiMap 的 inverse 方法来将 BiMap 转换成 BiMap val inverseMap = kTv.inverse() // 获取反转之后的 key 集合 val values2 = inverseMap.keySet() // 在获取 key 集合之后遍历反转之后的 BiMap values2.foreach((k: Int ) => println("key " +k + " value "+ inverseMap(k))) } // 创建传入参数(Seq[String]) val listInput = List[String]("aimer","aimer","kylin","kokia","rurutia","kylin") getMapFromSeq(listInput) }