序文
私は最近、文字列のスプライシングといくつかの方法を考えたかもしれない何かを書きましたが、パフォーマンスは不明なので、以下でテストしましょう。詳細な紹介を一緒に見てみましょう。
サンプルコード
public class test {list <string> list = new ArrayList <>(); @before public void init(){intstream.range(0、100000).foreach((index) - > {list.add( "str" + index);}); } @org.junit.test public void test1(){string ss = ""; long starttime = system.currenttimemillis(); for(string s:list){ss += s; } system.out.println(system.currenttimemillis() - starttime); } @org.junit.test public void test2(){string ss = ""; long starttime = system.currenttimemillis(); for(string s:list){ss = ss.concat(s); } system.out.println(system.currenttimemillis() - starttime); } @org.junit.test public void test3(){stringbuilder ss = new StringBuilder(); long starttime = system.currenttimemillis(); for(string s:list){ss.append(s); } system.out.println(system.currenttimemillis() - starttime); } @org.junit.test public void test4(){long starttime = system.currenttimemillis(); stringutils.join(list); System.out.println(System.CurrentTimemillis() - starttime); } @org.junit.test public void test5(){stringbuffer ss = new StringBuffer(); long starttime = system.currenttimemillis(); for(string s:list){ss.append(s); } system.out.println(system.currenttimemillis() - starttime); }}最初のタイプ:33809
2番目のタイプ:8851
3番目のタイプ:6
4番目のタイプ:12
5番目のタイプ:7
パフォーマンス: StringBuilder>StringBuffer>StringUtils.join>concat>+
次に、ソースコードレベルから分析します
StringBuilder:
各文字列のスプライシングは内部charアレイを展開し、最終的な文字列のみを生成するため、これが最も効率的です
stringbuffer:
StringBuilderと比較して、もう1つの同期があるため、単一のスレッドケースでは違いは大きくありません。
stringutils.join:
StringBuilderを使用して内部的に実装されていることがわかりますが、各ループには判断する余分なセパレーターがあるため、少し遅くなりますが、それほど遅くはありません。
concat:
各接続が文字列を生成するので、効率は非常に低いことがわかります
+:
それは過負荷のオペレーターであるため、ソースコードは見つかりませんが、結果によると効率は最低です
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。