gpt4 book ai didi

arrays - 什么时候应该使用Scala的Array而不是其他集合之一?

转载 作者:行者123 更新时间:2023-12-04 05:21:52 32 4
gpt4 key购买 nike

这更多是关于样式和首选项的问题,但是这里有:我什么时候应该使用scala.Array?我一直使用List,偶尔会遇到Seq,Map之类的东西,但是我从没用过,也从未见过Array。只是为了实现Java兼容性吗?我是否缺少常见用例?

最佳答案

首先,让我们在此声明免责声明。 Scala 2.7的Array尝试同时成为Java Array和Scala集合。它大多成功,但在某些极端情况下都失败。不幸的是,这些普通情况可能发生在使用普通代码的优秀人员身上,因此Scala 2.8与此背道而驰。

在Scala 2.8上,有Array,它是Java Array。这意味着它是一个连续的存储空间,可以存储引用或原语(因此可能具有不同的元素大小),并且可以非常快地进行随机访问。它还具有糟糕的方法,可怕的toString实现,并且在同时使用泛型和基元时(例如def f[T](a: Array[T]) = ...; f(Array(1,2,3)))表现不佳。

然后是GenericArray,这是一个由Array支持的Scala集合。它总是存储盒装基元,因此在混合基元和泛型时不会出现性能问题,但是另一方面,它不具有纯基元(非泛型)基元数组的性能提升。

那么,什么时候使用什么呢? Array具有以下特征:

  • O(1)随机读写
  • O(n)追加/添加/插入/删除
  • 可变

  • 如果您不需要泛型,或者您的泛型可以表示为 [T <: AnyRef],从而排除了 AnyVal的原语,并且这些特征对于您的代码而言是最佳的,那么就去做吧。

    如果确实需要泛型(包括基元),并且这些特征最适合您的代码,请在Scala 2.8上使用 GenericArray。另外,如果您想要一个真正的Collection及其所有方法,则可能也要使用它,而不是依赖于隐式转换。

    如果您想保持不变性,或者需要良好的性能进行追加,添加,插入或删除操作,请寻找其他集合。

    关于arrays - 什么时候应该使用Scala的Array而不是其他集合之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1792932/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com