2010-09-24 6 views
0

StringBuffer ou HashMapStringBuffer ou HashMap pour l'ajout de codes?

Quelle est la meilleure façon d'ajouter des codes et permet également une meilleure performance.

StringBuffer sql = new StringBuffer(); 
DBDatabase db = UTIL.getDatabase(); 
sql.append("SELECT I.FLDCODE, I.FLDDESCR, I.FLDWORKPHON FROM "); 
sql.append(db.getSchema()); 
sql.append("TRNINSTR I, "); 
sql.append(db.getSchema()); 
sql.append("TRNCRSIN C WHERE C.FLDCOURSE = ? AND C.FLDINSTRUCT = I.FLDCODE AND (I.FLDINACTIVE IS NULL OR I.FLDINACTIVE <> 'y') ORDER BY C.FLDSEQUENCE"); 
DBPreparedStatement stmt = new DBPreparedStatement(db, sql, "TrainPage.getInfoInstrList"); 
stmt.setString(1, courseType); 
DBResultSet rs = stmt.executeQuery(); 
stmt.close(); 
+1

Comment voulez-vous utiliser hashmap pour ajouter des codes? – Gadolin

Répondre

2

Votre question n'est pas claire ("codes annexes"? "HashMap"?), Mais je suppose que vous demandez quelle est la manière la plus efficace de construire une chaîne.

En général, un StringBuilder est plus efficace qu'un StringBuffer, car les méthodes de ce dernier sont synchronisées et ce n'est qu'une surcharge inutile pour un objet confiné par un thread. Mais il y a ensuite la question de savoir si l'utilisation d'un StringBuilder est plus efficace qu'une simple concaténation de chaîne. Et la réponse à cela est que "cela dépend".

Si vous faites beaucoup de concaténations séparées, un StringBuilder est généralement plus rapide; par exemple.

String s = ""; 
for (int i = 0; i < 1000; i++) { 
    s += "X"; 
} 

Si vous faites tous les concaténations dans une expression, il fait sans doute pas de différence:

String s = "Hi " + name + ". It is a might fine " + day + "."; 

En effet, le compilateur Java transformer en code qui crée un StringBuilder et exécute une série d'appels append.

Cependant, il s'agit d'une légère sur-simplification. D'une part, si votre application peut facilement calculer la longueur de la chaîne finale, vous pouvez obtenir de meilleures performances en utilisant un StringBuilder en allouant au constructeur la bonne capacité initiale. D'autre part, le compilateur évaluera concaténations de littéraux de chaîne avant la main, si

String s = "Hi " + "mom" + ". is a might fine " + "tuesday" + "."; 

sera plus rapide que:

StringBuilder sb = new StringBuilder(); 
sb.append("Hi "); 
sb.append("mom"); 
sb.append(". is a might fine "); 
sb.append("tuesday"); 
sb.append("."); 
String s = sb.toString(); 

Mais la ligne de fond est que il n'a probablement pas d'importance . À moins de faire énormément de construction de chaînes, il y a de fortes chances que l'impact sur la performance globale de votre application soit minime.

6

StringBuilder fonctionne encore mieux. Gardez à l'esprit que la partie lente est l'accès à la base de données et non la préparation d'une déclaration.

Questions connexes