java - Google guava vs Scala 集合框架对比

标签 java scala guava scala-collections

有很多常见的概念:

  • 不可变集合,
  • 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/

相关文章:

java - 如何检查通过 UDP 连接交换的数据类型

java - 如何使用 Java 中的 Spliterator 测试并行处理的性能

java - 仅当服务器执行循环时,套接字客户端才不会从服务器接收消息

java - 无法解析类型 org.eclipse.core.runtime.IConfigurationElement

scala - 为什么 Scala Source 不关闭底层 InputStream?

java - 具有弱键的并发映射

scala - 超越特质和 self 类型

scala - WARN ScalaRowValueReader:字段 'client'由数组支持,但是关联的Spark Schema不能反射(reflect)这一点

java - HashMap<String, boolean> 将所有键复制到 HashMap<String, Integer> 并将值初始化为零

java:缓存数据库表,刷新 1 小时