我是靠谱客的博主 高兴羊,最近开发中收集的这篇文章主要介绍Guava Multimap 教程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Guava Multimap 教程

本文我们看看Google Guava库中Map的实现————Multimap.其类似java.util.map,键值映射集合,但其每个键可以关联多个值。

maven 依赖

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>21.0</version>
</dependency>

Multimap实现

使用Multimap,如果我们给相同的key增加两个值,第二个值不会覆盖第一个值,相反,会得到两个值,请看测试代码:

String key = "a-key";
Multimap<String, String> map = ArrayListMultimap.create();
map.put(key, "firstValue");
map.put(key, "secondValue");
assertEquals(2, map.size());

打印map的内容,输出为:

{a-key=[firstValue, secondValue]}

通过“a-key”键获取值,会得到Collection类型,其包括firstValue和secondValule:

Collection<String> values = map.get(key);

打印结果:

[firstValue, secondValue]

与标准Map比较

java.util包中map没有相同key可以关联多个值的功能。下面代码给map中同一个可以增加两个值:

String key = "a-key";
Map<String, String> map = new LinkedHashMap<>();
map.put(key, "firstValue");
map.put(key, "secondValue");
assertEquals(1, map.size());

map中仅保留一个元素(secondValue),因为第二次put操作会覆盖第一个值。如果我们想实现Guava的Multimap相同功能,我们需要创建map,其中包含List类型作为其值:

String key = "a-key";
Map<String, List<String>> map = new LinkedHashMap<>();
List<String> values = map.get(key);
if(values == null) {
values = new LinkedList<>();
values.add("firstValue");
values.add("secondValue");
}
map.put(key, values);
assertEquals(1, map.size());

很明显,使用很不方便。针对这样需求,guava Multimap想比标准map是更好的选择。
需要注意的是,虽然在list中有两个元素,但size方法返回1.在MultiMap中size返回实际存储在map中值的数量,但是keySet().size()返回唯一键的数量。

Multimap的优点

Multimap通常用在需要使用Map<K, Collection> 的场景,两者区别包括:

  • 通过put方法新增元素时,无需填充空集合

  • get方法从不返回null,仅为空结合(所以不像使用Map<String, Collection>,无需检查null)。

  • Multimap 中有一个key,如果其仅映射至一个值。任何导致其关联零个值的操作,将导致key关联的值在Multimap中被删除的效果。如果使用Map<String, Collection>,即使我们删除集合中所有值,其仍然会保留一个空结合作为其值,这个不必要的内存开销。

  • size方法返回所有值元素的数量

总结

本文我们展示了如何使用Guava MultiMap,并与标准Map进行比较显示Guava Multimap的优势。

最后

以上就是高兴羊为你收集整理的Guava Multimap 教程的全部内容,希望文章能够帮你解决Guava Multimap 教程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部