Vorwort
Ich habe kürzlich etwas geschrieben, das möglicherweise das Spleißen von String in Betracht gezogen hat und an verschiedene Methoden gedacht hat, aber die Leistung ist unbekannt. Testen wir es also unten. Schauen wir uns die detaillierte Einführung gemeinsam an.
Beispielcode
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 start time = system.currenttimemillis (); für (Zeichenfolge S: Liste) {ss += s; } System.out.println (System.currentTimemillis () - StartTime); } @org.junit.test public void Test2 () {String ss = ""; Long start time = system.currenttimemillis (); für (Zeichenfolge S: Liste) {ss = ss.concat (s); } System.out.println (System.currentTimemillis () - StartTime); } @org.junit.test public void test3 () {StringBuilder ss = new StringBuilder (); Long start time = system.currenttimemillis (); für (String S: List) {ss.Append (s); } System.out.println (System.currentTimemillis () - StartTime); } @org.junit.test public void Test4 () {Long startTime = System.currentTimemillis (); Stringutils.join (Liste); System.out.println (System.currentTimemillis () - StartTime); } @org.junit.test public void Test5 () {StringBuffer SS = new StringBuffer (); Long start time = system.currenttimemillis (); für (String S: List) {ss.Append (s); } System.out.println (System.currentTimemillis () - StartTime); }}Der erste Typ: 33809
Der zweite Typ: 8851
Der dritte Typ: 6
Der vierte Typ: 12
Der fünfte Typ: 7
Leistung: StringBuilder>StringBuffer>StringUtils.join>concat>+
Analysieren Sie es dann von der Quellcode -Ebene
StringBuilder:
Jedes String -Spleißen erweitert nur das interne Char -Array und erzeugt nur eine endgültige Zeichenfolge. Dies ist daher die effizienteste
StringBuffer:
Im Vergleich zu StringBuilder gibt es nur eine synchronisierte, sodass der Unterschied in einem einzelnen Thread -Fall nicht groß ist.
Stringutils.join:
Sie können sehen, dass es immer noch intern mit StringBuilder implementiert ist, aber jede Schleife hat einen zusätzlichen Trennzeichen zu beurteilen. Es ist also etwas langsamer, aber nicht viel, und es ist eine Größenordnung.
concat:
Es ist ersichtlich, dass jede Verbindung eine Zeichenfolge erzeugt, sodass die Effizienz sehr niedrig ist
+:
Da es sich um einen überladenen Operator handelt, kann der Quellcode nicht gefunden werden, aber die Effizienz ist nach den Ergebnissen am niedrigsten
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.