有很多常见的概念:
- 不可变集合,
- Collection View ,
- 严格/非严格收集,
- 集合构建器
Guava 和 Scala Collection API 中的模式相同。 那么区别是什么呢?两个库都符合模式吗?扩展的容易性是否足够好?
所以我想听听使用它们的人对这些框架的比较。
最佳答案
Google Guava 是一个很棒的库,这是毫无疑问的。但是,它是用 Java 实现的,并且受到所有限制:
- 标准库中没有不可变的集合接口(interface)
- 没有 lambda 字面量(闭包),因此围绕 SAM 类型需要一些繁重的样板文件,例如谓词
- 类型规范有很多重复,尤其是涉及泛型的地方
Guava 也必须存在于 Java 的标准集合库中,因此很少有 3rd 方库会公开与 guava 兼容的函数字面量或使用特定于 guava 的集合类型。这会导致您使用的每个第三方库的阻抗不匹配。例如,您通常希望将从此类库返回的集合转换为适当的 guava 不可变集合 - 特别是在多线程环境中工作时。
Scala 集合具有更好地集成到语言中的设计,您会发现它们在整个 scala 标准库以及通过 Scala 实现的 3rd 方产品广泛使用。默认情况下,Scala 集合也是不可变的,因此您最终会得到更安全的代码,不需要额外的防御性包装层。
如果您可以使用 Scala,那么就这样做吧,它除了集合框架之外还有很多优势。如果您必须使用 Java,那么 Guava 是一个不错的选择,尤其是考虑到 Scala 集合如果没有 Scala 提供的语言特性就不是特别容易使用。
在混合项目中,Guava 集合完全可以在 Scala 中使用,但该语言还提供了允许您使用 Java 集合(包括公开相同接口(interface)的 Guava)的机制,就好像它们是 Scala 自己的集合一样。
关于java - Google guava vs Scala 集合框架对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6598498/