[Java] Comparaison de vitesse de combinaison de chaînes

introduction

Il était déjà largement connu depuis longtemps (* autour de Java 1.5) que "les jointures de chaîne ne sont pas" + ", mais l'utilisation de StringBuffer accélère le processus." Par conséquent, j'utilise toujours en gros StringBuffer et StringBuilder pour la concaténation de chaînes, mais je me suis soudainement demandé "Quelle est la vitesse de traitement de la méthode concat de la classe String?", Donc cette fois, ces vitesses de traitement J'ai essayé de comparer.

environnement de test

Code utilisé pour les tests

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");
	}
}

résultats de test

Traitement du contenu temps de traitement
+Combiné par 7439ms
String.concat()Combiné par 2990ms
Rejoignez StringBuilder 2ms
Rejoindre par StringBuffer 4ms

Prise en compte des résultats des tests

Histoire de niveau naturel

Pourquoi String.concat () est-il un peu plus rapide que "join by +"?

String.concat()

String.Extrait de cours


//Source obtenue à l'aide du plugin Eclipse Class Decompiler.

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);
   }
}

Combiner avec +

Le langage Java fournit une prise en charge spéciale des opérateurs de concaténation de chaînes (+) et d'autres conversions objet-chaîne. La concaténation de chaînes est implémentée à l'aide de la classe StringBuilder (ou StringBuffer) et de sa méthode append.

Résumé

Recommended Posts

[Java] Comparaison de vitesse de combinaison de chaînes
[Note] Java: mesure la vitesse de concaténation de chaînes
[Java] Comparaison correcte du type String
[Java] Comparaison des chaînes de caractères et && et ||
L'histoire de la comparaison de chaînes de bas niveau en Java
[Java] Comparaison de la vitesse de conversion de type
[Java] Comparaison de la vitesse d'exécution de la jointure de chaîne (+ opérateur vs StringBuilder)
Diverses méthodes de la classe Java String
Chaîne Java
Concernant la comparaison d'équivalence de type de chaîne en Java
[Java / Swift] Comparaison de l'interface Java et du protocole Swift
Point 63: Méfiez-vous des performances de la concaténation de chaînes
Test de comparaison de vitesse pour String, StringBuilder, StringBuffer
[Java] Remplissage de la chaîne de caractères
Comparaison des chaînes MyBatis
[Java] Comparaison de cartes
Traitement des chaînes Java
Comparaison du framework Java
Chaîne divisée (Java)
[Java] Présentation de Java
[Java] Obtenir la longueur de la chaîne de paire de substitution
[Java] La partie déroutante de String et StringBuilder
[Note] Java: vitesse de traitement de la liste par objectif
Pourquoi la comparaison de classe de type chaîne Java (==) ne peut pas être utilisée
[Vérification] Comparaison de la vitesse de démarrage de Spring Boot et de Micronaut
Collection expirée de java
Caractéristiques prévues de Java
[Java] Importance de serialVersionUID
[Java] Signification de public static void main (String [] args)
[Type de chaîne vs Générateur de chaînes] Différence de vitesse de traitement dans la combinaison de chaînes
La comparaison d'énumération est ==, et equals est bonne [Java]
NIO.2 examen de Java
Avis sur Java Shilber
Comparaison de la notation de la version Java
Comparaison de vitesse au moment de la génération au moment de la conversion de la date
Remplacement multiple de chaîne Java
java --Unification des commentaires
[java.io] Résumé de l'entrée de chaîne Java (InputStream, Reader, Scanner)
Histoire des annotations Java
[Note] Java: recherche de chaînes de caractères
[Note] Java: enquête sur les chaînes de caractères
java (mérites du polymorphisme)
[Java] À propos de Objects.equals () et examen de la comparaison de chaînes (== et égal à)
À propos de la classe Java String
Examen NIO de Java
[Développement] Comparaison du framework Java
Comparaison équivalente de la classe wrapper Java et du type primitif
[Java] Trois fonctionnalités de Java
[Sécurité Null] Mémo de comparaison Kotlin Java Utilisation correcte de la sécurité Null
Résumé du support Java 2018
[Java] Gestion des chaînes de caractères (classe String et classe StringBuilder)
[Java] Méthode de comparaison de chaînes de caractères et méthode de comparaison utilisant des expressions régulières
Comparaison de l'écriture des fonctions de rappel (Java, JavaScript, Ruby)
"Comprendre ce genre de chose n ° 2" Volume d'opérateurs de comparaison [Java]
Initialisation avec une chaîne vide vers une instance de type Java String
[Java] Essayez de modifier les éléments de la chaîne Json à l'aide de la bibliothèque
[Introduction à Java] Gestion des chaînes de caractères (classe String, classe StringBuilder)
À propos des instances Java
[Java] Utilisation de Mirage-Basic de SQL
[Java] Compréhension débutante de Servlet-②