在sun的API中,map是不支持直接存放相同的key的,相同key会被后一个key替代的,但是我们可以通过一些工具包实现这样的功能 ——> Google基于java1.6的类库集合的扩展项目–Guava,其中com.google.common.collect包就支持这样的操作
MultiMap
场景:当需要实现Map<K, List<V>>或Map<K, Set<V>>数据结构时,代码会编写的很麻烦。
Multimap 提供了一个方便地把一个键对应到多个值的数据结构。
我们可以这样理解Multimap:”键-单个值映射”的集合(例如:a -> 1 a -> 2 a ->4 b -> 3 c -> 5)
特点:不会有任何键映射到空集合:一个键要么至少到一个值,要么根本就不在Multimap中。
主要方法介绍:
-
put(K, V):添加键到单个值的映射
-
putAll(K, Iterable<V>):依次添加键到多个值的映射
-
remove(K, V):移除键到值的映射;如果有这样的键值并成功移除,返回true
-
removeAll(K):清除键对应的所有值,返回的集合包含所有之前映射到K的值,但修改这个集合就不会影响Multimap了
-
replaceValues(K, Iterable<V>):清除键对应的所有值,并重新把key关联到Iterable中的每个元素。返回的集合包含所有之前映射到K的值
Multimap支持若干强大的视图
- asMap为Multimap<K, V>提供Map<K,Collection<V>>形式的视图。返回的Map支持remove操作,并且会反映到底层的 Multimap,但它不支持put或putAll操作。更重要的是,如果你想为Mult