5.FreshMinutes.IT – Java & IT

5 minutes pour consolider ses connaissances en Java et dans les Nouvelles Technos.
  • Accueil
  • À propos
  • Contact, Twitter, Tumblr & Buzz

Optimiser ses chaines de caractères

Eric Vialle | Jeudi 15 mai 2008 | 9:03


Connaissez vous la différence entre StringBuilder, StringBuffer et String ?

Tous ces objets contiennent des chaines de caractères mais les traitent différemment. En choisissant bien la classe à utiliser, on peut grandement accélérer son code.

Différences Entre String et StringBuffer

L’objet String est immuable.

Modifier une chaine de caractères en utilisant String provoquera de multiples créations d’objets. Et comme vous vous en doutez, la création et la destruction d’objet consomme les ressources du système…

  1. String s = "Je t'aime, "
  2. String result = s;
  3.     for (int i=1; i < 100; i++) {
  4.         result = result + s;
  5.     }
  6.     return result;

Ce code créera 102 objets String.

Maintenant utilisons StringBuffer

  1.    String s = "Je t'aime, "
  2.    StringBuffer result = new StringBuffer(s);
  3.     for (int i=1; i < 100; i++) {
  4.         result.append(s);
  5.     }
  6.     return result.toString();

Seul 3 objets String seront créés, quelque soit le nombre d’itérations…

Vous pourriez accélérer encore plus ce code StringBuffer en indiquant la capacité initiale de la chaine de caractère: StringBuffer result = new StringBuffer(s.lenght() * 100);

Et StringBuilder ?

StringBuilder est apparu avec Java 5. Il s’agit d’une classe similaire à StringBuffer au niveau de ses méthodes et des ses fnctions. La différence réside dans le fait que StringBuilder est plus rapide que StringBuffer…

Pourquoi? Les méthodes de StringBuffer sont synchronized: – c’est à dire Thread safe – alors que celles de StringBuilder ne le sont pas.

Optimisation Automatique

Le compilateur Java est toutefois capable d’optimiser automatiquement les chaines de caractères.

  1. String a = "5 Fresh Minutes";
  2. String b = " IT";
  3. //Autres instructions...
  4. String s = "a + b = " + a + b;

serait traduit par

  1. String a = "5 Fresh Minutes";
  2. String b = " IT";
  3. //Autres instructions...
  4. StringBuffer sbuf = new StringBuffer(32);
  5. sbuf.append("a + b = ").append(a).append(b);
  6. String s = sbuf.toString();

Quelle Classe utiliser ?

  1. Utilisez String, pour les chaines de caractères fixes.
  2. Si le texte est sujet à diverses modifications et se place dans un contexte mono thread, utilisez la classe StringBuilder
  3. Si le texte est sujet à diverses modifications et se place dans un contexte multi thread, utilisez la classe StringBuffer

A lire:

  • Javadoc de String
  • Javadoc de StringBuffer
  • Javadoc de StringBuilder
  • Le mot clef Synchronized
  • BIen utiliser les chaines de caractères

Sources:

  • http://www.leepoint.net/notes-java/data/strings/23stringbufferetc.html
  • http://en.wikipedia.org/wiki/StringBuffer_and_StringBuilder
  • http://gfx.developpez.com/tutoriel/java/strings/


Catégories
Dévelopement Tips, J2ME, J2SE, Java, Java EE
Tags
developpement, Java, optimisation, String, StringBuffer, StringBuilder
Flux rss des commentaires
Flux rss des commentaires
Trackback
Trackback

« Une vrai solution Open Source pour les Nouvelles RIA ? JVM Tuning – Optimiser les performances de la machine virtuelle »

Leave a Reply

Cliquez ici pour annuler la réponse.

Articles récents

  • Push & communications asynchrones sur iOS (iPhone/iPad)
  • Optimiser le temps de chargement pour le web mobile avec iPhone, jQTouch, Struts 2 et Tomcat
  • La philosophie du Domain Driven Design User Group et l’état des lieux * Users Group en Février 2010
  • Introduction au NoSQL (et de Redis) ou le compte rendu du NoSQL User Group Paris de Février 2010
  • Gérer le Cache-Control HTTP dans une application Web Java EE avec Tomcat
  • Compiler son code? “It’s so 2000s” ou un apercu de Play et JRebel
  • Le blog change d’adresse
  • Le Paris JUG a fêté ses 2 ans: compte-rendu

Navigation

  • Actualités Flux pour tous les articles classés dans Actualités
  • Architecture IT Flux pour tous les articles classés dans Architecture IT
  • Base de données Flux pour tous les articles classés dans Base de données
  • Java Flux pour tous les articles classés dans Java
    • Dévelopement Tips Flux pour tous les articles classés dans Dévelopement Tips
    • EDI Flux pour tous les articles classés dans EDI
    • J2ME Flux pour tous les articles classés dans J2ME
    • J2SE Flux pour tous les articles classés dans J2SE
    • Java EE Flux pour tous les articles classés dans Java EE
    • Tutoriel Flux pour tous les articles classés dans Tutoriel
  • Non classé Flux pour tous les articles classés dans Non classé
  • NoSQL Flux pour tous les articles classés dans NoSQL

Promo

Mots Clefs

adobe apache application web Base de données benchmark bugs c# checkstyle dérivation eclipse find bugs findbugs flex framework play google gzip http iPhone jar Java Java User Group java web start JVM microsoft mysql object objet open source optimisation oracle performance plugin pmd polymorphisme qualité recrutement rich internet application serveur silverlight struts struts 2 sun test Tomcat web

WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.

Twitter

  • J'ai testé OnLive Games sur mon Mac en Wifi: vraiment impressionnant que les possibilités du cloud gaming 2011-01-17
  • More updates...

Livres Pour Aller Plus Loin…

Blogoliste

  • Berthou.com
  • Le blog de hugu
  • PHP – Le Blog de Fatiha
  • techno.blog(java4it)
Get Adobe Flash playerPlugin by wpburn.com wordpress themes
rss Flux rss des commentaires valid xhtml 1.1 design by jide powered by Wordpress get firefox