-2
votes

Manipulation de chaîne: Pourquoi la méthode 1 est moins efficace que la méthode 2

J'ai un problème dans lequel je dois concaténer deux caractères ou plus de deux manières différentes. La méthode 1 est la suivante:

StringBuffer b = new StringBuffer();
for( int i = 0; i < 10; ++i ){
b.append( i );
b.append( ' ' );
}
String s = b.toString();


6 commentaires

Pourquoi cette question a-t-elle reçu un point négatif? J'ai un petit doute sur lequel j'ai juste besoin de plus de clarification.


La plupart du temps, les gens n'expliqueront pas pourquoi ils votent une question. Mais êtes-vous certain que vous avez copié ces exemples exactement?


Ces exemples d'un livre que j'ai mentionné. Je lisais ce livre pour ma préparation d'entrevue. Ce n'est pas une tâche des devoirs ni une question.


Le second est de loin plus efficace. Cela crée une seule instance de Stringbuffer où la première crée une pour chaque itération.


Doit être un livre vraiment vieux livre, en utilisant stringbuffer --- Voir Différence entre StressBuilder et stringbuffer


Je pense que la communauté de la pile-overflow devrait être plus ouverte aux nouveaux développeurs..Vous devriez être autorisé à demander ce qu'ils veulent. Je crois que cela devrait être le seul but de la pile-overflow. Ce ne devrait pas être une plate-forme de jugement de la question de toute personne.


3 Réponses :


1
votes

Méthode 1 Définit une nouvelle Stringbuffer et appelle Tostring () chaque itération, qui utilise plus d'opérations et de plus de mémoire par rapport à la méthode 2 où une Stringbuffer est créée une seule fois et que ToString () est appelée juste une fois


0 commentaires

1
votes

Vous allez. Mes commentaires identifient la surcharge ajoutée de la première méthode.

String s = "";
for( int i = 0; i < 10; ++i ){

// create this for each iteration
StringBuffer t = new StringBuffer();

// extra method call to add string in progress
t.append( s ); 

t.append( i );

// more overhead appending string than a char
t.append( " " );

// convert StringBuffer to a string to append back in later
s = t.toString();
}


0 commentaires

0
votes

Votre méthode 1 consomme beaucoup de mémoire inutile et il n'est pas nécessaire de comparer à la méthode 2. Même si vous pouvez utiliser StringBuilder au lieu de StressBuffer, vous pouvez lire le Javadoc comme pourquoi StringBuilder est plus rapide N mieux que Stringbuffer et où il est nécessaire d'utiliser quoi.


0 commentaires