详解Google_Guava与Apache_Collections对原生增强

梦墨酱_8972

梦墨酱_8972

2026-04-11

803人浏览

原创

guava 更现代、强调不可变性与函数式风格,apache commons collections 更早出现、侧重 jdk 旧版本兼容性补充;前者提供完整不可变集合、轻量新类型(multimap/multiset/bimap)及安全工具方法,后者缺乏原生不可变支持、api 较重且部分功能已被取代。

详解google_guava与apache_collections对原生增强

Google Guava 和 Apache Commons Collections 都是对 Java 原生集合(java.util)的重要增强库,但它们定位不同、设计哲学有别、适用场景也不尽相同。简单说:Guava 更现代、更强调不可变性与函数式风格;Apache Commons Collections 更早出现、更侧重对 JDK 旧版本的兼容性补充,且部分 API 已逐渐被 Guava 或 JDK 自身取代。

核心定位与演进背景

Apache Commons Collections 诞生于 JDK 1.2–1.4 时代,当时 Collection 接口缺乏泛型、缺少常用工具方法(如过滤、转换、多值映射),也无不可变/线程安全集合的标准化实现。它用“工具类 + 新集合类型”方式补足短板,例如 MultiMap、Bag、TransformedCollection 等。

Golang Google Wire
Golang Google Wire

在 Go 中使用 google/wire 实现编译时依赖注入——wire.NewSet、wire.Build、wire.Bind(接口→实现)、wire.Struct、wire.Value、wire.Interface

下载

Google Guava 出现在 JDK 5 泛型普及后,结合了函数式编程思想和 Google 内部工程实践。它不追求“大而全”,而是提供经过严格验证、API 一致、文档完善、默认安全(如空值处理、不可变优先)的增强能力。从 JDK 8 开始,其部分功能(如流式操作、Optional)已被标准库吸收,但 Guava 在集合构造、缓存、原语集合、范围操作等方面仍不可替代。

关键增强能力对比

不可变集合
– Commons Collections:无原生不可变集合,需手动包装(如 Collections.unmodifiableList()),且不递归保护嵌套结构。
– Guava:提供完整不可变集合族(ImmutableList、ImmutableSet、ImmutableMap 等),构造即冻结,线程安全,内存高效,并支持 builder 模式和 of() 快捷创建。

新集合类型
– Commons Collections:提供 MultiMap(键可重复映射)、Bag(计数集合)、BidiMap(双向映射),但接口抽象较重,部分实现性能一般。
– Guava:用更轻量、更明确的方式实现:
 • Multimap(分离 key-value 关系,支持 ArrayListMultimap / HashMultimap)
 • Multiset(替代 Bag,支持计数、遍历带频次)
 • BiMap(强制 value 唯一,支持 inverse() 反转视图)

集合工具方法
– Commons Collections:CollectionUtils 提供大量静态方法(union、intersection、filter),但多数接受原始 Collection,泛型擦除导致类型不安全,且 filter 会就地修改原集合。
– Guava:Iterables / Lists / Sets 等工具类方法返回新集合或不可变视图,不污染源数据;配合 Predicates(已逐步迁至 JDK 8+ 的 Predicate)和 Functions(推荐改用 java.util.function),逻辑更清晰。

实际使用建议

✅ 新项目首选 Guava:
 • 依赖少(单 jar)、文档好、更新活跃、与 JDK 8+ 协同自然
 • 用 Immutable* 替代手写不可变包装
 • 用 Multimap 处理一对多关系,比 Map<k list>></k> 更简洁安全
 • 遇到原语集合(int[] 对应的集合)直接用 Ints.asList() 或 IntArrayList

⚠️ 谨慎使用 Commons Collections:
 • 仅在维护老系统(JDK org.apache.commons.collections 类型)时引入
 • 避免使用已标记 @Deprecated 的类(如 Transformer、Predicate 实现),因其存在反序列化漏洞风险(CVE-2015-6420 等)
 • 若需 LazyList 或 ObservableList 等特殊行为,优先考虑现代替代方案(如 Vavr、Eclipse Collections 或自定义装饰器)

? 迁移提示:
 • CollectionUtils.isEmpty(coll) → coll == null || coll.isEmpty()(JDK 原生足够)或 Objects.isNull(coll) || coll.isEmpty()
 • CollectionUtils.select(list, predicate) → Lists.newArrayList(Iterables.filter(list, predicate))(Guava)或 list.stream().filter(...).toList()(JDK 16+)
 • MultiHashMap → ArrayListMultimap.create()

总结:不是替代,而是演进

Apache Commons Collections 是 Java 集合生态早期的重要铺路者,而 Guava 是在其经验基础上重构的现代化增强。两者并非简单二选一,而是反映了 Java 集合 API 从“能用”到“好用”再到“安全易用”的演进路径。当前开发中,Guava 是更合理的选择;理解 Commons Collections 有助于读懂老代码,但不应作为新项目的集合增强首选。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

apache google

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
eclipse教程
eclipse教程

php中文网为大家带来eclipse教程合集,eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。php中文网还为大家带来eclipse的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

570

5

eclipse怎么设置中文
eclipse怎么设置中文

eclipse设置中文的方法:除了设置界面为中文外,你还可以为Eclipse添加中文插件,以便更好地支持中文编程。例如,你可以安装EBNF插件来支持中文变量名,或安装Chinese Helper来提供中文帮助文档。本专题为大家提供eclipse设置中文相关的各种文章、以及下载和课程。

2023.07.24

4766

6

c语言编程软件有哪些
c语言编程软件有哪些

c语言编程软件有GCC、Clang、Microsoft Visual Studio、Eclipse、NetBeans、Dev-C++、Code::Blocks、KDevelop、Sublime Text和Atom。更多关于c语言编程软件的问题详情请看本专题的文章。php中文网欢迎大家前来学习。

2023.11.02

7259

18

Eclipse版本号有哪些区别
Eclipse版本号有哪些区别

区别:1、Eclipse 3.x系列:Eclipse的早期版本,包括3.0、3.1、3.2等;2、Eclipse 4.x系列:Eclipse的最新版本,包括4.0、4.1、4.2等;3、Eclipse IDE for Java Developers等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

2784

5

eclipse和idea有什么区别
eclipse和idea有什么区别

eclipse和idea的区别:1、平台支持;2、内存占用;3、插件系统;4、智能代码提示;5、界面设计;6、调试功能;7、学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

622

5

eclipse设置中文全教程
eclipse设置中文全教程

本专题整合了eclipse设置中文相关教程,阅读专题下面的文章了解更多详细操作。

2025.10.10

3046

11

eclipse字体放大教程
eclipse字体放大教程

本专题整合了eclipse字体放大教程,阅读专题下面的文章了解更多详细内容。

2025.10.10

3065

12

eclipse左边栏不见了解决方法
eclipse左边栏不见了解决方法

本专题整合了eclipse左边栏相关教程,阅读专题下面的文章了解更多详细内容。

2025.10.15

408

3

eclipse字体相关教程
eclipse字体相关教程

本专题整合了eclipse字体设置相关教程,阅读专题下面的文章了解更多详细内容。

2025.11.26

834

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程