2011-11-15 4 views
1

Mon exigence est de stocker le gros morceau de données (valeur de chaîne), mais je suis confus lequel est préférable d'utiliser. Je veux seulement ajouter les données entrantes.StringBuilder Vs StringBuffer OU vecteur Vs ArrayList

e.g. String str1 = "abc" 
    String str2 = "123"; 
    String Str3 = "xyz"; 

suppose i am appending/ adding to (Sbuilder/SBuffer/ vector/ ArrayList) 
one after another, 
     e.g. str1, str2 str3 then output must be "abc123xyz" 
       str2, str1,str3 output must be   "123abcxyz" 

Répondre

2

Utilisez StringBuilder et ArrayList

StringBuffer et Vector ont la synchronisation des threads qui ajoute les frais généraux (sauf si vous en avez besoin, mais même alors il y a des façons d'ajouter que les nouvelles classes)

+0

Merci Brian ...! – user1010399

2

De la javadoc pour StringBuffer:

La classe StringBuilder doit généralement être utilisé de préférence à celui-ci, car il supporte tous les mêmes opérations, mais il est plus rapide, car il effectue pas de synchronisation .

En outre, je pense que le vecteur est également sauvegardé en interne par un tableau, et est à peu près obsolète. Si vous voulez des ajouts rapides, alors vous pouvez jeter un oeil à LinkedList (il est légèrement plus rapide que ArrayList pour les ajouts purs parce que vous n'avez pas à développer périodiquement le tableau de sauvegarde).

Cependant, si c'est juste pour des séquences de caractères, alors StringBuilder est optimisé pour exactement ce cas, et vous ne devriez pas traîner avec Collections avec tout leur surcoût.

+0

Merci bdares! les séquences de caractères sont importantes dans mon cas et bien sûr la taille à l'exécution. donc je pense que StringBuilder serait sympa à utiliser. – user1010399

+0

ne sais pas pourquoi, 'vecteur' est utilisé dans le projet pour le même, mais je pense que le vecteur n'est pas le bon choix pour concéder la chaîne seulement. – user1010399

0

Si vous n'avez pas besoin pour synchroniser vous pouvez éviter StringBuffer et Vector et préférer StringBuilder et ArrayList à la place. L'utilisation de StringBuilder ou de ArrayList dépend de vos besoins. Si vous voulez juste concaténer les chaînes SB est suffisant.

0

Si la taille des données est variable dans ce cas, nous avons utilisé StringBuffer car la classe StringBuffer est conçue pour créer et manipuler des informations de chaîne dynamiques. La mémoire allouée à l'objet est automatiquement.

0

Si vous faites cela dans un seul thread, vous devrez utiliser a StringBuilder sur tout ce que vous voulez accomplir est la concaténation de chaîne; Pour plusieurs types, utilisez un ArrayList.

2

Principalement les méthodes StringBuffer sont synchronized tandis que les StringBuilder ne le sont pas.

This class [StringBuilder] provides an API compatible with StringBuffer, but with no 
guarantee of synchronization. This class is designed for use as a drop-in replacement 
for StringBuffer in places where the string buffer was being used by a single 
thread (as is generally the case). Where possible, it is recommended that this class be 
used in preference to StringBuffer as it will be faster under most i implementations. 

* Identique *Vector est synchronized mais ArrayList n'est pas synchronized et deuxième

A Vector defaults to doubling the size of its array, while the ArrayList increases its 
array size by 50 percent. 

choisir donc selon vos besoins ..

+0

StringBuffer n'est presque jamais nécessaire pour la synchronisation, principalement pour la rétrocompatibilité. –

Questions connexes