Nossa… acho que me ajudaram bastante.
Então, basicamente, é melhor usar sempre um StringBuilder em vez de String e de StringBuffer?
E sobre o synchronized… somente a classe (dentre as 3 citadas) que usa esse tipo de método (não sei como falar)?
Seria como aquela parada de região crítica e exclusão mútua, né? Que um processo (ou thread, nesse caso) não pode acessar a região crítica (do código), porque se 2 ou mais acessarem ou mesmo tempo ocorre o problema que o Vini citou. É isso? Nossa, isso é uma baita vantagem heim?? Mas… existe alguma desvantagem em usar StringBuilder?
Vini, Rafa, xjcd, Renatu… me ajudaram muito mesmo!
Só tenho mais 2 perguntas…
Dessa maneira, eu posso substituir meus objetos Strings por StringBuilder?
e
@xjcd, eu estou usando sempre o <K,V> sim. O TreeMap não armazenaria na ordem alfabética também? Se eu precisasse de uma estrutura que fizesse isso automaticamente (sem chamar algum método dela), eu deveria usar Maps ou Lists? O problema de usar List é que eu acho que teria que ordenar muitas vezes, e acho que isso é muito despendioso (falando em milhares de nomes). Até mesmo que eu não sei como algum método .sort() de uma List é feito. Se for por Bubble… deuzolivre. Já, se fosse um quicksort… ou numa árvore (como falei), seria mais rápido, porque eu teria que percorrer recursivamente somente metade das árvores, não é?
Valeu mesmo galera!