deleteCharAt ou setLength, ce qui est mieux pour supprimer le dernier caractère de l'un StringBuilder/StringBuffer

Dans de nombreux cas, nous avons besoin de supprimer le dernier char de un StringBuilder/StringBuffer. Par exemple, étant donné un int[]{1,2,3}, pour mettre en œuvre un String toString(int[] a) méthode, communiquant avec chacun des éléments avec une virgule comme séparateur. La sortie doit être 1,2,3, pas de résidus par des virgules.

On peut facilement écrire une boucle:

int[] nums = new int[]{1,2,3,4,5};
StringBuilder sb = new StringBuilder();
for (int i = 0; i < nums.length; i++) {
    sb.append(nums[i]);
    sb.append(",");
}
//here we need to remove the tailing ','

mais nous avons toujours besoin d'enlever les résidus de ','. Il y a deux façons de la mettre en œuvre:

sb.deleteCharAt(sb.length() - 1);

et

sb.setLength(sb.length() - 1);

Dont l'une est recommandé? Pourquoi?

NOTE:
Je sais que ce n' Arrays.toString faire. C'est juste un exemple pour décrire ma question, peut-être pas tout à fait correct.
Ce n'est pas une discussion à propos des chaînes de concaténation, mais les meilleures pratiques de StringBuffer/StringBuilder.

Quel est le problème avec Arrays.toString(nums)? et puis supprimer le premier et le dernier char. Mais une bonne question à propos de l'usage général.
D'accord avec vous. J'ai édité ma question.
J'ai trouvé très proche de la question à la vôtre dans le CodeReview.SE.
Cette réponse de @jon-skeet donne une excellente alternative à l'utilisation de StringBuilder sans enlever tout résidus.

OriginalL'auteur Weibo Li | 2014-02-08