„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Artikel Achten Sie auf die Leistung der Zeichenfolgenverkettung

Artikel Achten Sie auf die Leistung der Zeichenfolgenverkettung

Veröffentlicht am 08.11.2024
Durchsuche:954

1. Verkettung von Strings mit dem Operator ( ):
Die Verwendung des Operators zum Verketten von Zeichenfolgen ist für einige Verkettungen praktisch, führt jedoch aufgrund der Unveränderlichkeit von Zeichenfolgen zu Leistungsproblemen bei umfangreichen Vorgängen.
Jedes Mal, wenn eine neue Zeichenfolge erstellt wird, wird der Inhalt aller vorherigen Zeichenfolgen kopiert, was bei großen Verkettungen zu einer quadratischen Zeit führt.

Falsches Beispiel (wiederholte Verkettung mit ):

public String criaFatura(List itens) {
    String fatura = "";
    for (Item item : itens) {
        fatura  = item.toString();  // ineficiente para grandes listas
    }
    return fatura;
}

2. Mit StringBuilder die Leistung verbessern:
Verwenden Sie anstelle von StringBuilder, mit dem Sie Zeichenfolgen effizient ändern und nach Bedarf dynamisch Speicher zuweisen können.
Die Verkettungszeit mit StringBuilder ist linear, was die Leistung erheblich verbessert.

Richtiges Beispiel (Verwendung von StringBuilder):

public String criaFatura(List itens) {
    StringBuilder fatura = new StringBuilder(itens.size() * 80);  // pré-alocação
    for (Item item : itens) {
        fatura.append(item.toString());
    }
    return fatura.toString();
}

3. Leistungsvergleich:
Selbst nach Verbesserungen in Java 6 zur Optimierung des Operators ist die Verwendung von StringBuilder weiterhin effizienter. Auf einer Testmaschine war die Verwendung von StringBuilder 6,5-mal schneller als der Bediener in einem Szenario mit 100 Elementen.

Beispiel für eine Optimierung ohne Vorbelegung:

public String criaFatura(List itens) {
    StringBuilder fatura = new StringBuilder();  // sem pré-alocação
    for (Item item : itens) {
        fatura.append(item.toString());
    }
    return fatura.toString();
}

4. Die Moral der Geschichte:
Verwenden Sie es nicht, um viele Zeichenfolgen zu verketten. Mit zunehmender Anzahl an Verkettungen wird die Leistung schnell inakzeptabel.
Verwenden Sie StringBuilder.append oder Alternativen wie Zeichenarrays für große Mengen an Verkettungen.

5. Andere Alternativen:
Zusätzlich zu StringBuilder können Sie die Verwendung von Zeichenarrays für umfangreiche Verarbeitung oder zum effizienteren Kombinieren von Zeichenfolgen in Betracht ziehen, insbesondere wenn eine genauere Kontrolle der Leistung erforderlich ist.

Abschluss:
Verwenden Sie StringBuilder, um Zeichenfolgen effizient zu verketten.
Vermeiden Sie die Verwendung des Operators in Schleifen oder für große Mengen an Zeichenfolgen, da die Leistung mit zunehmender Anzahl von Verkettungen erheblich abnimmt.

Beispiele aus dem Buch:

Item  Cuidado com o desempenho da concatenação de string

Item  Cuidado com o desempenho da concatenação de string

Freigabeerklärung Dieser Artikel ist reproduziert unter: https://dev.to/giselecoder/item-63-cuidado-com-o-desemenho-da-concatenacaode-string-2b67?1, wenn es eine Verletzung gibt. Bitte wenden Sie sich an [email protected], um ihn zu löschen.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3