一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情。
3.2、Multimap
3.2.1、本质
Multimap是把键映射到任意多个值的一般方式,本质上和map非常相似: Map<K, Collection>,
a → [1, 2,2,1] b → <1,2,3>
3.2.2、常用实现
有Map<K, List>、Map<K, Set> 等多种实现
- ArrayListMultimap
- HashMultimap
- LinkedListMultimap
- LinkedHashMultimap
- TreeMultimap
3.2.3、常用方法
3.2.4、代码示例
HashMultimap<String,String> hashMultimap = HashMultimap.create();
hashMultimap.put("T1","北京");
hashMultimap.put("T1","上海");
hashMultimap.put("T2","天津");
hashMultimap.put("T3","苏州");
hashMultimap.put("L1","洛阳");
// {T1=[上海, 北京], T2=[天津]}
System.out.println(hashMultimap);
HashMultimap<String,String> hashMultimap2 = HashMultimap.create();
hashMultimap2.put("T2","杭州");
hashMultimap.putAll(hashMultimap2);
// {T1=[上海, 北京], T2=[杭州, 天津]}
System.out.println(hashMultimap);
// 删除指定key的指定value
hashMultimap.remove("T2","杭州");
// {L1=[洛阳], T1=[上海, 北京], T2=[天津], T3=[苏州]}
System.out.println(hashMultimap);
// 删除指定key全部值
hashMultimap.removeAll("T3");
// {L1=[洛阳], T1=[上海, 北京], T2=[天津]}
System.out.println(hashMultimap);
// 获取指定key对应的集合 [上海, 北京]
System.out.println(hashMultimap.get("T1"));
// [L1=洛阳, T1=上海, T1=北京, T2=天津]
System.out.println(hashMultimap.entries());
// [L1=[洛阳], T1=[上海, 北京], T2=[天津]]
System.out.println(hashMultimap.asMap().entrySet());
// 4
System.out.println(hashMultimap.size());
// 3
System.out.println(hashMultimap.keySet().size());
3.3、BiMap
3.2.1、本质
BiMap<K, V>是特殊的Map,inverse方法可以反转BiMap<K, V>的键反向映射,实现K-V、V-K双向映射。
3.2.2、常用实现
- HashBiMap
- EnumBiMap
- EnumHashBiMap
3.2.3、常见方法
BiMap的方法相对简单
3.2.4、代码示例
/**
* 一般情况下,当我们需要维护一个双向kv的时候,可能需要创建两个map
*
* Map<String, Integer> nameToId = Maps.newHashMap();
* Map<Integer, String> idToName = Maps.newHashMap();
*
*
* nameToId.put("Bob", 42);
* idToName.put(42, "Bob");
*
*/
BiMap<String, String> school = HashBiMap.create();
school.put("北京","010");
school.put("上海","021");
// {北京=010, 上海=021}
System.out.println(school);
BiMap<String, String> school2 = HashBiMap.create();
school2.put("郑州","0371");
//school2.forcePut("郑州","0371");
school.putAll(school2);
// {北京=010, 上海=021, 郑州=0371}
System.out.println(school);
BiMap<String, String> inverseSchool = school.inverse();
// {010=北京, 021=上海, 0371=郑州}
System.out.println(inverseSchool);
// [北京, 上海, 郑州]
System.out.println(inverseSchool.values());