【问题标题】:How can I use primitives in Scala?如何在 Scala 中使用原语?
【发布时间】:2020-09-11 01:28:51
【问题描述】:

我可以在 Scala 中使用原语吗?

该用例用于存储数十亿个整数,因此 4 字节(对于整数)和 16 字节(对于整数)之间的区别很重要。

【问题讨论】:

  • scala 尽可能编译为原语(Array[Int] => int[] 等)
  • 如果你实际上有数十亿个整数,即使你使用原语,你也可能会遇到内存问题,而且数组的大小在 JVM 上受到限制,因为需要元素的整数引用,即约 20 亿个元素。考虑流式传输数据或使用数据库。

标签: scala primitive-types


【解决方案1】:

如果您希望 Scala 存储未装箱的原语,您可以使用 Array[Int],但不要在其上使用任何酷炫的 Scala 收集方法(因为它会强制装箱)。

如果您寻找不可变的原始类型集合,您可以查看Debox,它提供了专门的缓冲区、集合和映射。该项目仍在发展中,但前景广阔。

【讨论】:

  • 我认为调用 Debox 容器不可变是不正确的。然而,Debox 努力提供 Scala mutable.Buffer、Map 和 Set 的特性(例如自动增长),具有良好的性能,尤其是没有装箱。
【解决方案2】:

您可以使用@specialised 注释让编译器为您创建一个类的专用实例。见this article

class Container[@specialized(Int) T](value: T) {
  def apply(): T = value
}

【讨论】:

    猜你喜欢
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多