1、Guava 是谷歌为其内部 Java 项目打造的一套实用工具库,核心覆盖集合操作、I/O 处理与数学计算等领域,部分功能与 Apache Commons 存在交集。它实质上是对 Java Collections API 中基础数据结构的重要延伸与增强,显著提升了开发效率与代码可读性。

2、Guava 新增了 Multiset(多重集合)这一数据结构,允许同一元素在集合中重复出现。它内置了统计指定元素频次的接口,并支持一键转为常规 Set,从而适配多样化业务场景,大幅拓展了集合操作的能力边界。

3、与 Collections 框架类似,Guava 提供了多种 Multiset 实现类,例如基于哈希表的 HashMultiset、支持排序的 TreeMultiset,以及线程安全的 ConcurrentHashMultiset,以满足不同性能与并发需求。

4、下图呈现了当前系统中正在使用的多重集合实例。

5、该结构能精确记录每个元素的实际出现次数。从语义上看,Multiset 可被理解为“元素 → 出现频次”的映射关系。虽然也可借助 Map
6、多值映射(Multimap)则进一步扩展了键值关系,允许多个相同键共存,具备与多重集合相似的语义特征。
7、当需将一个键映射至多个值时,传统做法是让键关联 List 或 Set,但在插入新值时常需编写如下形式的冗余判断逻辑:

在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
8、此类手动维护方式不仅易错、可读性差,还难以保障并发安全性。采用 Guava 的 Multimap 可彻底规避这些问题,使代码更简洁、鲁棒且高效。
9、下图展示了 Multimap 的典型应用示例。

10、其 get(key) 方法返回的是一个集合(如 Collection
11、Multimap 与标准 Map 接口存在若干关键差异:首先,get() 永不返回 null——若键不存在,则返回空集合;其次,size() 统计的是所有键值对总数,而非键的唯一数量。这些设计让 Multimap 在处理复杂映射关系时更加直观、安全且符合直觉。

12、同 Multiset 一样,Multimap 也提供 asMap() 方法,将其转换为标准 Map
13、Guava 还引入了 BiMap 接口,专用于构建双向映射:既可通过键查值,也能通过值反查键。在原生 Java 中实现该能力较为繁琐,往往需维护两个同步更新的 Map,并强制确保值的全局唯一性,稍有疏忽即引发一致性错误。
14、下图以股票代码与公司名称的对应关系为例说明 BiMap 的使用场景。

15、调用 inverse() 获取的反向视图并非独立副本,而是原始 BiMap 的镜像引用——任一方的修改(如 put、remove)都会实时同步至另一方,保证双向视图始终严格一致。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










