[Java] Geschwindigkeitsvergleich der Zeichenfolgenkombination

Einführung

Es ist bereits vor langer Zeit allgemein bekannt (* um Java 1.5), dass "String-Joins nicht" + "sind, aber die Verwendung von StringBuffer den Prozess beschleunigt." Daher verwende ich im Grunde immer noch StringBuffer und StringBuilder für die Verkettung von Zeichenfolgen, aber ich fragte mich plötzlich: "Wie schnell ist die Verarbeitungsgeschwindigkeit der concat-Methode der String-Klasse?". Diesmal also diese Verarbeitungsgeschwindigkeiten Ich habe versucht zu vergleichen.

Testumgebung

Zum Testen verwendeter Code

StringTest.java


public class StringTest {
	public static void main(String[] args) {
		plus();
		concat();
		builder();
		buffer();
	}

	public static void plus() {

		long start = System.currentTimeMillis();
		String txt = "abc";

		for (int i=0; i<100000; i++) {
			txt += "abc";
		}

		long end = System.currentTimeMillis();
		System.out.println("+:" + (end - start) + "ms");
	}

	public static void concat() {

		long start = System.currentTimeMillis();
		String txt = "abc";

		for (int i=0; i<100000; i++) {
			txt = txt.concat("abc");
		}

		long end = System.currentTimeMillis();
		System.out.println("concat:" + (end - start) + "ms");
	}

	public static void builder() {

		long start = System.currentTimeMillis();
		StringBuilder sb = new StringBuilder("abc");

		for (int i=0; i<100000; i++) {
			sb.append("abc");
		}

		String txt = sb.toString();
		long end = System.currentTimeMillis();
		System.out.println("StringBuilder:" + (end - start) + "ms");
	}

	public static void buffer() {

		long start = System.currentTimeMillis();
		StringBuffer sb = new StringBuffer("abc");

		for (int i=0; i<100000; i++) {
			sb.append("abc");
		}

		String txt = sb.toString();
		long end = System.currentTimeMillis();
		System.out.println("StringBuffer:" + (end - start) + "ms");
	}
}

Testergebnisse

Inhalte verarbeiten Verarbeitungszeit
+Kombiniert von 7439ms
String.concat()Kombiniert von 2990ms
Treten Sie mit StringBuilder bei 2ms
Join von StringBuffer 4ms

Berücksichtigung der Testergebnisse

Geschichte auf natürlicher Ebene

Warum ist String.concat () etwas schneller als "Join by +"?

String.concat()

String.Auszug aus der Klasse


//Quelle, die mit dem Eclipse Class Decompiler-Plugin erhalten wurde.

public final class String implements Serializable, Comparable<String>, CharSequence {
   private final char[] value;

   public String concat(String arg0) {
      int arg1 = arg0.length();
      if(arg1 == 0) {
         return this;
      } else {
         int arg2 = this.value.length;
         char[] arg3 = Arrays.copyOf(this.value, arg2 + arg1);
         arg0.getChars(arg3, arg2);
         return new String(arg3, true);
      }
   }

   void getChars(char[] arg0, int arg1) {
      System.arraycopy(this.value, 0, arg0, arg1, this.value.length);
   }
}

Kombiniere mit +

Die Java-Sprache bietet spezielle Unterstützung für String-Verkettungsoperatoren (+) und andere Objekt-zu-String-Konvertierungen. Die Verkettung von Zeichenfolgen wird mithilfe der Klasse StringBuilder (oder StringBuffer) und ihrer Append-Methode implementiert.

Zusammenfassung

Recommended Posts

[Java] Geschwindigkeitsvergleich der Zeichenfolgenkombination
[Hinweis] Java: Messen Sie die Geschwindigkeit der Zeichenfolgenverkettung
[Java] Korrekter Vergleich des String-Typs
[Java] Vergleich von Zeichenketten und && und ||
Die Geschichte des einfachen String-Vergleichs in Java
[Java] Vergleich der Geschwindigkeit der Typkonvertierung
[Java] Vergleich der Ausführungsgeschwindigkeit des String-Joins (+ Operator vs StringBuilder)
Verschiedene Methoden der Java String Klasse
Java-Zeichenfolge
In Bezug auf den Vergleich der Zeichenfolgentypäquivalenz in Java
[Java / Swift] Vergleich von Java-Schnittstelle und Swift-Protokoll
Punkt 63: Beachten Sie die Leistung der Zeichenfolgenverkettung
Geschwindigkeitsvergleichstest für String, StringBuilder, StringBuffer
[Java] Auffüllen von Zeichenfolgen
MyBatis-Zeichenfolgenvergleich
[Java] Kartenvergleich
Java-String-Verarbeitung
Java Framework Vergleich
Geteilter String (Java)
[Java] Übersicht über Java
[Java] Ermittelt die Länge der Ersatzpaarzeichenfolge
[Java] Der verwirrende Teil von String und StringBuilder
[Hinweis] Java: Geschwindigkeit der Verarbeitung der Liste nach Zweck
Warum der Klassenvergleich vom Typ Java String (==) nicht verwendet werden kann
[Überprüfung] Vergleich der Spring Boot- mit der Micronaut-Boot-Geschwindigkeit
Abgelaufene Java-Sammlung
Voraussichtliche Funktionen von Java
[Java] Bedeutung der serialVersionUID
[Java] Bedeutung von Public static void main (String [] args)
[String type vs String Builder] Unterschied in der Verarbeitungsgeschwindigkeit in der String-Kombination
Der Vergleich von enum ist == und gleich ist gut [Java]
NIO.2 Überprüfung von Java
Bewertung von Java Shilber
Vergleich der Java-Versionsnotation
Geschwindigkeitsvergleich zum Zeitpunkt der Generierung zum Zeitpunkt der Datumskonvertierung
Mehrfacher Ersatz für Java-Zeichenfolgen
Java - Vereinigung von Kommentaren
[java.io] Zusammenfassung der Java-String-Eingabe (InputStream, Reader, Scanner)
Geschichte der Java-Annotationen
[Hinweis] Java: Zeichenfolgensuche
[Hinweis] Java: Zeichenkettenübersicht
Java (Verdienste des Polymorphismus)
[Java] Über Objects.equals () und Überprüfung des String-Vergleichs (== und gleich)
Informationen zur Java String-Klasse
NIO Bewertung von Java
[Entwicklung] Java Framework Vergleich
Äquivalenter Vergleich von Java-Wrapper-Klasse und primitivem Typ
[Java] Drei Funktionen von Java
[Null-Sicherheit] Kotlin Java-Vergleichsnotiz Richtige Verwendung der Null-Sicherheit
Zusammenfassung der Java-Unterstützung 2018
[Java] Umgang mit Zeichenketten (String-Klasse und StringBuilder-Klasse)
[Java] Vergleichsmethode für Zeichenketten und Vergleichsmethode mit regulären Ausdrücken
Vergleich des Schreibens von Callback-Funktionen (Java, JavaScript, Ruby)
"So etwas verstehen Nr. 2" Volumen der Vergleichsoperatoren [Java]
Initialisierung mit einer leeren Zeichenfolge für eine Instanz vom Typ Java-Zeichenfolge
[Java] Versuchen Sie, die Elemente der Json-Zeichenfolge mithilfe der Bibliothek zu bearbeiten
[Einführung in Java] Umgang mit Zeichenfolgen (String-Klasse, StringBuilder-Klasse)
Über Java-Instanzen
[Java] Mirage-Basic-Verwendung von SQL
[Java] Anfängerverständnis von Servlet-②