哪个解决方案有更好的性能:StringBuilder或字符串插值-连接



我正在使用Scala向磁盘写入文件。

要创建将写入文件的整个String,我目前正在遍历我的数据并将所有信息附加到StringBuilder对象中。

例如:

val moreData = getMoreData
strBuilder.append(moreData)
strBuilder.append("even more data")
//...
strBuilder.toString

在操作结束时,我调用StringBuilder的toString方法,并写入Path。

我知道Scala对字符串进行了编译优化,所以我的问题是:

哪种方法具有更好的性能。string - interpolation - concatation还是StringBuilder?

这些编译优化是否与StringBuilder有关?换句话说,是否有优化StringBuilder追加操作?

字符串插值连接使用StringBuilder来生成结果。可以进一步优化字符串插值,但就目前而言,它主要是为表达能力而设计的,而不是性能。如果你知道字符串的创建是有限制的,你应该使用StringBuilder,这并不难做到。如果你不知道,或者你知道这不是一个主要问题,字符串插值通常更容易阅读,所以在大多数情况下你应该更喜欢它。

连接多个字符串的最有效方法是使用StringBuilder

但是你的任务不是关于字符串连接。将多个字符串写入文件的最有效方法是使用旧java的FileWriterBufferedWriter:

val fw = new FileWriter("foo.out")
val bw = new BufferedWriter(fw)
strings.foreach {
  s =>
    bw.write(s)
}
bw.close()
fw.close()

如果您需要格式化功能,可以选择将BufferedWriterPrintWriter包装在一起。

当然,如果您更喜欢性能而不是代码大小,那么以上所有内容都是正确的。

最新更新