文章目录
前言
Guava引入了很多JDK没有的、但我们发现明显有用的新集合类型。这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其他概念。作为一般规则,Guava集合非常精准地遵循了JDK接口契约。
一、Multiset是什么?
Multiset是Guava提供的一个新集合类型,它可以多次添加相等的元素。
统计一个词在文档中出现了多少次,传统的做法是这样的:
Map<String, Integer> counts = new HashMap<String, Integer>();
for (String word : words) {
Integer count = counts.get(word);
if (count == null) {
counts.put(word, 1);
} else {
counts.put(word, count + 1);
}
}
这个写法太笨拙,Multiset的出现解决了此问题。
Multiset的部分方法如下:
方法 | 描述 |
---|---|
count(E) | 给定元素在Multiset中的计数 |
add(E, int) | 增加给定元素在Multiset中的计数 |
remove(E, int) | 减少给定元素在Multiset中的计数 |
setCount(E, int) | 设置给定元素在Multiset中的计数,不可以为负数 |
size() | 返回集合元素的总个数(包括重复的元素) |
简单应用
Multiset<String> set = HashMultiset.create();// 创建Multiset,HashMultiset是其中一个实现类
System.out.println(set.count("a"));// 输出0
System.out.println(set.count("b"));// 输出0
set.add("a");// 添加一个元素a
System.out.println(set.count("a"));// 输出1
set.add("a", 2);// 添加2个元素a
System.out.println(set.count("a"));// 输出3
set.add("b", 3);// 添加3个元素b
System.out.println(set.count("b"));// 输出3
System.out.println(set.size());// 输出6
总结:在某些复杂的业务场景里面合理应用,可以大大的减少代码量,提供开发效率。