在标准的 Java集合框架 中,我们常用 List、Set 和 Map 来存储数据。但有时候,我们需要一种既能像 Set 一样存储不重复元素,又能记录每个元素出现次数的数据结构——这就是多重集合(Multiset)。
本教程将带你从零开始,深入浅出地学习 Java多重集合 的概念、用途以及如何使用 Google Guava 库中的 Multiset 实现高效开发。
Multiset(也称为 Bag)是一种允许元素重复但不维护插入顺序的集合。与 List 不同,它不关心元素的位置;与 Set 不同,它允许同一个元素多次出现,并自动统计每个元素的出现次数。

假设你要统计一篇文章中每个单词出现的次数。用传统方式,你可能会用 Map<String, Integer>,但每次添加单词都要判断 key 是否存在、是否要初始化为 0……代码繁琐且易错。
而 Guava 的 Multiset 就是为这类场景设计的!它封装了计数逻辑,让你专注于业务本身。
Guava 是 Google 提供的一套 Java 工具库,其中包含 Multiset 的多种实现。首先,在你的项目中添加依赖:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>32.1.3-jre</version></dependency>implementation 'com.google.guava:guava:32.1.3-jre'Guava 提供了多种 Multiset 实现,最常用的是 HashMultiset(基于哈希表,无序)和 TreeMultiset(基于红黑树,有序)。
import com.google.common.collect.HashMultiset;import com.google.common.collect.Multiset;public class MultisetExample { public static void main(String[] args) { // 创建一个 HashMultiset Multiset<String> words = HashMultiset.create(); // 添加元素(可重复) words.add("apple"); words.add("banana"); words.add("apple"); words.add("apple"); System.out.println(words); // 输出:[apple x 3, banana] }}add(E):添加一个元素remove(E):移除一个元素(计数减1)count(E):获取元素出现次数elementSet():返回所有不重复元素的 Set 视图size():返回总元素个数(含重复)entrySet():返回每个元素及其计数的集合// 继续上面的例子System.out.println("apple 出现次数: " + words.count("apple")); // 3System.out.println("总元素数: " + words.size()); // 4System.out.println("不重复元素: " + words.elementSet()); // [apple, banana]// 遍历每个元素及其计数for (Multiset.Entry<String> entry : words.entrySet()) { System.out.println(entry.getElement() + " -> " + entry.getCount());}// 输出:// apple -> 3// banana -> 1下面是一个完整的例子,使用 Multiset Java教程 中学到的知识来统计一段文本中各单词的出现频率:
import com.google.common.collect.HashMultiset;import com.google.common.collect.Multiset;public class WordFrequency { public static void main(String[] args) { String text = "apple banana apple orange banana apple"; String[] words = text.split("\\s+"); Multiset<String> wordCount = HashMultiset.create(); for (String word : words) { wordCount.add(word.toLowerCase()); } System.out.println("词频统计结果:"); for (Multiset.Entry<String> entry : wordCount.entrySet()) { System.out.printf("%-10s : %d%n", entry.getElement(), entry.getCount()); } }}/* 输出:词频统计结果:apple : 3banana : 2orange : 1*/除了 HashMultiset,Guava 还提供:
通过本教程,你已经掌握了 Java多重集合 的核心概念和实际用法。使用 Guava 的 Multiset,你可以轻松处理需要计数的场景,避免手动维护 Map 的繁琐逻辑。
记住关键点:
现在,你已经可以自信地在项目中使用 Guava Multiset使用 技巧来简化代码、提升效率了!
关键词回顾:Java多重集合、Multiset Java教程、Guava Multiset使用、Java集合框架扩展。
本文由主机测评网于2025-12-08发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025124781.html