scala.collections.mutable.ArrayBuilder和scala.collections.mutable.ArrayBuffer有什么区别?例如,如果我需要构建一个可以使用的Array [Int],那么?是否存在任何性能差异,例如java.lang.StringBuffer和java.lang.StringBuilder?
axe*_*l22 44
ArrayBuilder是一个Builder,而构建器用于通过向它们添加元素来构造其他集合.通常不打算在客户端代码中直接使用构建器.
ArrayBuffer是Buffer和Seq- 缓冲区是可以有效附加元素的序列.序列带有很多辅助操作.
你可能需要一个ArrayBuffer.它旨在用作ArrayListJava中的替代品.的ArrayBuffer类是与所有像批量数据操作的完全供电的序列的集合foreach,map,filter,zip和朋友,不像ArrayBuilder其仅配备+=添加元素和result以获得在末尾阵列.
您可能更喜欢的一个地方ArrayBuilder是,当您为原始类型实例化它时Int,您关心性能.在这种情况下,ArrayBuilder变体专门用于不同的基元类型,并保持适当基元类型的基础数组,而ArrayBuffer总是在下面保存一个对象数组 - 您添加到它的每个基元都经历装箱.
要实例化数组缓冲区:
new ArrayBuffer[Int] // gives you an array buffer that will hold boxed integers
Run Code Online (Sandbox Code Playgroud)
要实例化数组构建器:
new ArrayBuilder.ofInt // gives you a manually specialized array builder that will hold real primitives
Run Code Online (Sandbox Code Playgroud)
我计时并构建一个ArrayBuilder明显更快的数组:
用ArrayBuffer:
real 0m40.348s
user 0m29.544s
sys 0m1.017s
Run Code Online (Sandbox Code Playgroud)
用Array Builder:
real 0m8.392s
user 0m4.769s
sys 0m0.330s
Run Code Online (Sandbox Code Playgroud)
我的代码:
import scala.collection.mutable.{ArrayBuffer, ArrayBuilder}
object MyObject {
def main(args: Array[String]) {
for (i <- 0 until 100) {
arrayBuilderMade
// or arrayBufferMade
}
}
def arrayBufferMade {
var aBuffer = new ArrayBuffer[Int]()
for (i <- 0 until 1000000) {
aBuffer += i
}
println(aBuffer.toArray.length)
}
def arrayBuilderMade {
var aBuilder = new ArrayBuilder.ofInt
for (i <- 0 until 1000000) {
aBuilder += i
}
println(aBuilder.result.length)
}
}
Run Code Online (Sandbox Code Playgroud)
和
time scala my_code.scala
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9245 次 |
| 最近记录: |