JavaとScalaのStringBuilder・StringBuffer事情
2020年7月30日 追記:こちらで詳しく解説しています
上級(歴史的経緯についての理解が必要)
scala.collection.mutable.StringBuilder, java.lang.StringBuilder, java.lang.StringBuffer の使い分けについて
- java.lang.StringBuilderはsynchronizedされてない。その分速い。Java 5から追加。
- java.lang.StringBufferはsynchronizedされてる。その分遅い。最初からある。
- Javaであれば、内容を変更可能な文字列を扱う際、基本的にはjava.lang.StringBuilderクラスを使う。
- 文字列の変更を繰り返す場合はStringよりもStringBuilerの方が効率的
- スレッドセーフを確保したい場面であれば、java.lang.StringBufferを使うとAPI Docsには書かれている。
- ただし、同期化の問題はStringBufferにすればたちまち解決するというものではないので、結局のところはStringBuilderを使いつつも同期化は手ずから愚直に実装すべきである。
- したがってStringBufferは基本的に使用すべきではなく、現在存在しているのは専ら後方互換の目的である。
- これを踏まえ、Scalaでは内容を変更可能な文字列を扱うにはscala.collection.mutable.StringBuilderクラスを使えばよい
- scala.collection.mutable.StringBuilderは内部実装がStringBuilderである
- scala.collection.mutable.StringBuilderはjava.lang.StringBuilderと機能的に互換性がある。
- さらにScalaっぽい使い方ができるようになっている(要出典)
- 長い文字列
参考
追記
まだ読んでいないがこちらの記事も参考になりそう
comments powered by Disqus