Ich werde versuchen, dies mit einem Beispiel zu erklären.
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
System.out.println(sb.length());
System.out.println(sb.capacity());
}
}
length()
- die Länge der Zeichenfolge im Builder da diese Stringbuilder keine Inhalte enthalten, wird seine Länge 0.
capacity()
sein - die Anzahl der Zeichenräume, die zugeteilt wurden . Wenn Sie versuchen, einen Zeichenfolgengenerator mit leerem Inhalt zu erstellen, wird standardmäßig die Initialisierungsgröße als Länge + 16 verwendet, die 0 + 16 ist. So würde die Kapazität 16 hier zurückkehren.
Hinweis: Die Kapazität, die von der capacity() -Methode zurückgegeben wird, ist immer größer oder gleich der Länge (normalerweise größer als) und wird automatisch erweitert, wenn Erweiterungen des Zeichenfolgengenerators erforderlich sind.
Die Logik hinter der Kapazitätsfunktion:
- Wenn Sie initialisieren nicht Stringbuilder mit beliebigem Inhalt, werden Standardkapazität als 16 Zeichen Kapazität genommen werden.
- Wenn Sie Stringbuilder mit einem Inhalt initialisieren, hat die Kapazität die Inhaltslänge + 16.
- Wenn Sie dem stringbuilder-Objekt neuen Inhalt hinzufügen, wenn die aktuelle Kapazität nicht ausreicht, um einen neuen Wert zu erhalten, wird sie um (vorherige Array-Kapazität + 1) * 2 erhöht.
Diese Analyse nehmen von actual StringBuilder.java code
Warum interessiert dich die "Kapazität"? Es wächst automatisch, um alles Notwendige aufzunehmen. Sie können damit spielen, um die Leistung zu verbessern, aber es ist immer noch asymptotisch linear. – polygenelubricants
Es gibt Fragen über "Kapazität" im Vergleich zu "Länge" in der OCA-Prüfung, so dass für manche Leute das Problem eine Menge bedeutet. –