Quelle est la capacité d'un StringBuffer?
Lorsque j'exécute ce code:
StringBuffer name = new StringBuffer("stackoverflow.com");
System.out.println("Length: " + name.length() + ", capacity: " + name.capacity());
elle donne sortie:
Longueur: 17, capacité: 33
Évident longueur est liée au nombre de caractères dans la chaîne, mais je ne suis pas sûr de ce que la capacité est?
Est que nombre de caractères que StringBuffer peut contenir avant la réaffectation de l'espace?
Pourquoi downvote? 🙁
OriginalL'auteur | 2011-11-04
Vous devez vous connecter pour publier un commentaire.
Voir: JavaSE 6 java.lang.StringBuffer (capacité)
Mais votre hypothèse est correcte:
OriginalL'auteur
Oui, vous avez raison, voir la JavaDoc pour plus d'informations:
OriginalL'auteur
En interne
StringBuffer
utilise unchar
tableau pour stocker les caractères. La capacité est de la taille initiale de lachar
tableau.Plus d'informations peuvent être trouvées à partir de http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html
OriginalL'auteur
De http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html#capacity%28%29
Également à partir du même document
OriginalL'auteur
Oui, c'est exactement ça. Vous pouvez penser
StringBuffer
comme un peu comme unVector<char>
à cet égard (à l'exception, évidemment, vous ne pouvez pas utiliserchar
comme un argument de type Java...)OriginalL'auteur
À partir de: http://download.oracle.com/javase/1.4.2/docs/api/java/lang/StringBuffer.html
OriginalL'auteur
StringBuffer a un char[] dans laquelle elle empêche les chaînes que vous ajoutez à ça. La quantité de mémoire allouée à la mémoire tampon est la capacité. Le montant actuellement utilisée est la longueur.
OriginalL'auteur
C'est la taille de la mémoire tampon interne. Comme Javadoc dit:
OriginalL'auteur
Pris de l'officiel J2SE documentation
Son généralement longueur+16, qui est le minimum de l'allocation, mais une fois que le nombre de caractères à-dire sa taille dépasse les alloué à un, StringBuffer augmente également sa taille (montant fixe), mais par la façon dont beaucoup de la somme sera affectée,nous ne pouvons pas calculer.
OriginalL'auteur
"Chaque tampon de chaîne a une capacité. Aussi longtemps que la longueur de la séquence de caractères contenus dans la chaîne de la mémoire tampon n'excède pas la capacité, il n'est pas nécessaire d'allouer un nouveau tampon interne du tableau. Si les dépassements de la mémoire tampon interne, il est automatiquement fait plus grand."
http://download.oracle.com/javase/1.3/docs/api/java/lang/StringBuffer.html
-voir (capacité) et ensurecapacity()
OriginalL'auteur
La capacité est la quantité de stockage disponible pour les nouveaux caractères insérés.Elle est différente de la longueur().La longueur() renvoie le nombre de caractères et retourne la valeur de la capacité 16 par défaut si le nombre de caractères de moins de 16.Mais si le nombre de caractères de plus de 16 capacité est le nombre de caractères + 16.
Dans ce cas,pas de caractères=17
DONC,Capacité=17+16=33
OriginalL'auteur
Ivan, il suffit de lire la documentation pour capacité() - il répond directement à votre question...
Citation: Renvoie à la capacité actuelle. La capacité est la quantité de stockage disponible pour les nouveaux caractères insérés, au-delà de laquelle une allocation de se produire.
OriginalL'auteur
La capacité initiale de StringBuffer/StringBuilder classe est de 16 ans.
Pour la première fois, si la longueur de votre Chaîne devient >16.
La capacité de StringBuffer/StringBuilder classe augmente de 34 j'.e [(16*2)+2]
Mais lorsque la longueur de votre Chaîne devient >34 de la capacité de StringBuffer/StringBuilder classe devient exactement égale à la longueur actuelle de la Chaîne.
OriginalL'auteur