Maison Java javaDidacticiel Une introduction détaillée à StringBuilder n'est plus nécessaire pour épisser des chaînes dans Java 8

Une introduction détaillée à StringBuilder n'est plus nécessaire pour épisser des chaînes dans Java 8

Mar 18, 2017 am 11:20 AM

Parmi les développeurs Java, la consommation élevée de ressources de l'épissage de chaînes est souvent un sujet brûlant

Discutons en profondeur des raisons pour lesquelles il occupe des ressources élevées.

En Java, un StringObject est immuable, ce qui signifie qu'une fois créé, vous ne pouvez pas le modifier. Ainsi, lorsque nous concaténons des chaînes, une nouvelle chaîne est créée et l'ancienne est marquée par le ramasse-miettes.

Si nous traitons des millions de chaînes, alors nous générerons des millions de chaînes supplémentaires qui seront traitées par le garbage collector.

La couche inférieure de la machine virtuelle effectue de nombreuses opérations lors de l'épissage des chaînes. L'opérateur point le plus direct pour concaténer des chaînes est l'opération String#concat(String).

public String concat(String str) {
    int otherLen = str.length();
    if (otherLen == 0) {
        return this;
    }
    int len = value.length;
    char buf[] = Arrays.copyOf(value, len + otherLen);
    str.getChars(buf, len);
    return new String(buf, true);
}
Copier après la connexion
public static char[] copyOf(char[] original, int newLength) {
    char[] copy = new char[newLength];
    System.arraycopy(original, 0, copy, 0,
                     Math.min(original.length, newLength));
    return copy;
}
Copier après la connexion
void getChars(char dst[], int dstBegin) {
    System.arraycopy(value, 0, dst, dstBegin, value.length);
}
Copier après la connexion

Vous pouvez voir qu'un tableau de caractères est créé, et la longueur est la somme des caractères existants et de la longueur des caractères épissés. Leurs valeurs sont ensuite copiées dans un nouveau tableau de caractères. Enfin, créez un objet String à partir de ce tableau de caractères et renvoyez-le.

Ces opérations sont donc nombreuses. Si vous le calculez, vous constaterez que la complexité est O(n^2).

Pour résoudre ce problème, nous utilisons la classe StringBuilder. C'est comme une classe String mutable. La méthode d’épissage nous aide à éviter les duplications inutiles. Il a une complexité de O(n), ce qui est bien meilleur que O(n^2).

Cependant, Java 8 utilise StringBuilder pour concaténer les chaînes par défaut.

La documentation pour Java 8 indique  :

Afin d'améliorer les performances de concaténation de chaînes, le compilateur Java peut utiliser la classe StringBuffer ou une technologie similaire. Réduisez la création d’objets String intermédiaires lorsque la valeur expression .

Le compilateur Java gère cette situation :

public class StringConcatenateDemo {
  public static void main(String[] args) {
     String str = "Hello ";
     str += "world";
   }
}
Copier après la connexion

Le code ci-dessus sera compilé dans le bytecode suivant :

public class StringConcatenateDemo {
  public StringConcatenateDemo();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return
  public static void main(java.lang.String[]);
    Code:
       0: ldc           #2                  // String Hello
       2: astore_1
       3: new           #3                  // class java/lang/StringBuilder
       6: dup
       7: invokespecial #4                  // Method java/lang/StringBuilder."<init>":()V
      10: aload_1
      11: invokevirtual #5                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      14: ldc           #6                  // String world
      16: invokevirtual #5                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      19: invokevirtual #7                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      22: astore_1
      23: return
}
Copier après la connexion

Vous pouvez Comme vu dans ces bytecodes, StringBuilder est utilisé. Nous n'avons donc plus besoin d'utiliser la classe StringBuilder dans Java 8.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment calculer la date il y a un an ou un an plus tard en Java 8 ? Comment calculer la date il y a un an ou un an plus tard en Java 8 ? Apr 26, 2023 am 09:22 AM

Java8 calcule la date il y a un an ou un an plus tard à l'aide de la méthode minus() pour calculer la date il y a un an packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo09{publicstaticvoidmain(String[ ]args ){LocalDatetoday=LocalDate.now();LocalDatepreviousYear=today.minus(1,ChronoUni

Convertir une chaîne en StringBuilder en Java Convertir une chaîne en StringBuilder en Java Sep 02, 2023 pm 03:57 PM

La méthode append() de la classe StringBuilder accepte une valeur String et l'ajoute à l'objet actuel. Convertir la valeur de chaîne en objet StringBuilder - Obtenir la valeur de chaîne. Ajoutez à l’aide de la méthode append() pour obtenir la chaîne dans StringBuilder. Exemple Dans le programme Java suivant, nous convertissons un tableau de chaînes en un seul objet StringBuilder. Démonstration en temps réel publicclassStringToStringBuilder{ publicstaticvoidmain(Stringargs[]){&a

Comment concaténer des chaînes en langage Go Comment concaténer des chaînes en langage Go Jan 12, 2023 pm 04:25 PM

Méthode d'épissage de chaînes : 1. Utilisez le signe « + » pour épisser, la syntaxe est « str = str1 + str2 » ; 2. Utilisez la fonction sprintf() du package fmt pour épisser, la syntaxe est « str = fmt. Sprintf("%s%d% s", s1, i, s2)"; 3. Utilisez la fonction join pour épisser; 4. Utilisez la fonction WriteString() du package tampon pour épisser; 5. Utilisez le générateur du package tampon () fonction à épisser.

Utilisez la méthode delete() de la classe StringBuilder en Java pour supprimer une partie du contenu de la chaîne Utilisez la méthode delete() de la classe StringBuilder en Java pour supprimer une partie du contenu de la chaîne Jul 26, 2023 pm 08:43 PM

Utilisez la méthode delete() de la classe StringBuilder en Java pour supprimer une partie du contenu d'une chaîne. La classe String est une classe de traitement de chaînes couramment utilisée en Java. Elle possède de nombreuses méthodes couramment utilisées pour les opérations sur les chaînes. Cependant, dans certains cas, nous devons modifier fréquemment les chaînes, et l'immuabilité de la classe String entraînera la création fréquente de nouveaux objets chaîne, affectant ainsi les performances. Pour résoudre ce problème, Java fournit la classe StringBuilder, qui

Quelles sont les méthodes pour effacer stringbuilder ? Quelles sont les méthodes pour effacer stringbuilder ? Oct 12, 2023 pm 04:57 PM

Les méthodes pour effacer stringbuilder sont : 1. Utilisez la méthode setLength(0) pour effacer l'objet StringBuilder ; 2. Utilisez la méthode delete(0, length) pour effacer l'objet StringBuilder ; ") pour effacer l'objet StringBuilder ; 4., utilisez new StringBuilder() pour recréer un nouvel objet StringBuilder.

Utilisez la fonction StringBuilder.replace() de Java pour remplacer une plage de caractères spécifiée Utilisez la fonction StringBuilder.replace() de Java pour remplacer une plage de caractères spécifiée Jul 24, 2023 pm 06:12 PM

Utilisez la fonction StringBuilder.replace() de Java pour remplacer une plage de caractères spécifiée. En Java, la classe StringBuilder fournit la méthode replace(), qui peut être utilisée pour remplacer une plage de caractères spécifiée dans une chaîne. La syntaxe de cette méthode est la suivante : publicStringBuilderreplace(intstart,intend,Stringstr) La méthode ci-dessus est utilisée pour remplacer l'étoile d'index de

Interprétation de la documentation Java : introduction détaillée à la méthode substring() de la classe StringBuilder Interprétation de la documentation Java : introduction détaillée à la méthode substring() de la classe StringBuilder Nov 03, 2023 pm 04:31 PM

Interprétation de la documentation Java : Introduction détaillée à la méthode substring() de la classe StringBuilder Introduction : En programmation Java, le traitement des chaînes est l'une des opérations les plus courantes. Java fournit une série de classes et de méthodes pour le traitement des chaînes, parmi lesquelles la classe StringBuilder est un choix couramment utilisé pour les opérations fréquentes sur les chaînes. Dans la classe StringBuilder, la méthode substring() est une méthode très utile pour intercepter les sous-chaînes de chaînes. Cet article sera

Comment utiliser la fonction substring() de la classe StringBuilder en Java pour intercepter la sous-chaîne d'une chaîne Comment utiliser la fonction substring() de la classe StringBuilder en Java pour intercepter la sous-chaîne d'une chaîne Jul 24, 2023 pm 12:13 PM

Comment Java utilise-t-il la fonction substring() de la classe StringBuilder pour intercepter une sous-chaîne d'une chaîne ? En Java, nous avons souvent besoin de traiter des opérations sur les chaînes. La classe StringBuilder de Java fournit une série de méthodes pour nous faciliter l'exploitation des chaînes. Parmi elles, la fonction substring() peut être utilisée pour intercepter des sous-chaînes de chaînes. La fonction substring() a deux formes surchargées, à savoir substring(intstar

See all articles