Muitimap 就是一个 key 对应多个 value 的数据结构。看上去它很像 java.util.Map 的结构,但是 Muitimap 不是 Map,没有实现 Map 的接口。
Muitimap 接口的主要实现类有:
HashMultimap: key 放在 HashMap,而 value 放在 HashSet,即一个 key 对应的 value 不可重复
ArrayListMultimap: key 放在 HashMap,而 value 放在 ArrayList,即一个 key 对应的 value 有顺序可重复
LinkedHashMultimap: key 放在 LinkedHashMap,而 value 放在 LinkedHashSet,即一个 key 对应的 value 有顺序不可重复
TreeMultimap: key 放在 TreeMap,而 value 放在 TreeSet,即一个 key 对应的 value 有排列顺序
ImmutableListMultimap: 不可修改。key 放在 ImmutableMap,而value放在ImmutableList
ImmutableSetMultimap: 不可修改。key 放在 ImmutableMap,而value放在ImmutableSet
Multimap<String, String> multimap = ArrayListMultimap.create();
for(int i=1; i<=13; i++){
multimap.put("key"+(i%5), "value"+i);
}
System.out.println("multimap size :" + multimap.size()); //集合元素的总数量,不是不重复键的数量
multimap.put("key0", "newvalue"); //为key添加value
multimap.remove("key0", "value5"); //删除key的某个value
System.out.println("#####");
for(String key : multimap.keySet()){ //得到不重复键的数目,并递归获取对应的值集合
System.out.println(key + ":"+multimap.get(key)); //显示每个key的值集合。就算key不存在,值集合一定也是非null的集合
}
//System.out.println(scoreMultimap.asMap().get("dd")); //key不存在时返回null
执行结果如下:
multimap size :13
#####
key4:[value4, value9]
key3:[value3, value8, value13]
key0:[value10, newvalue]
key2:[value2, value7, value12]
key1:[value1, value6, value11]