pr1*_*001 8 arrays coding-style scala scala-collections
这更像是一个风格和偏好的问题,但这里说:我什么时候应该使用scala.Array?我一直使用List,偶尔遇到Seq,Map等,但我从未使用过,也没有看过Array.是否仅适用于Java兼容性?我错过了一个常见的用例吗?
Dan*_*ral 12
首先,我们在这里做一个免责声明.Scala 2.7 Array尝试同时成为Java Array和Scala集合.它主要成功,但在某些角落情况下都失败了.不幸的是,这些极端情况可能发生在具有正常代码的优秀人员身上,因此Scala 2.8正在脱离这一点.
在Scala 2.8上,有ArrayJava,它就是Java Array.这意味着它是一个连续的内存空间,它存储引用或基元(因此,可能具有不同的元素大小),并且可以非常快速地随机访问.它还有糟糕的方法,糟糕的toString实现,并且在同时使用泛型和基元时表现不佳(例如:) def f[T](a: Array[T]) = ...; f(Array(1,2,3)).
然后,有GenericArray一个Scala Collection由一个支持Array.它总是存储盒装基元,因此在混合基元和泛型时它没有性能问题,但另一方面,它没有纯粹原始(非泛型)基元数组的性能增益.
那么,何时使用什么?一个Array具有以下特点:
如果您不需要泛型,或者您的泛型可以被声明为[T <: AnyRef],因此排除原语,这些AnyVal,并且这些特征对于您的代码是最佳的,那么就去做吧.
如果您确实需要泛型,包括基元,并且这些特性对于您的代码是最佳的,请GenericArray在Scala 2.8上使用.此外,如果您想要一个真正的Collection及其所有方法,您可能也想使用它,而不是依赖于隐式转换.
如果您想要不可变性,或者如果您需要良好的性能来追加,前置,插入或删除,请寻找其他一些集合.
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |