Corrigi seu javadoc (para usar o estilo recomendado pela Sun) e sua rotina.
Veja que o javadoc não é feito para ser lido diretamente pelo programador; é feito para ser lido pelo programa
javadoc do JDK, para produzir uma saída parecida com o Javadoc da API do Java.
Portanto você NÃO inclui:
O nome da rotina (já está na própria definição do método);
O tipo dos parâmetros (já está na própria definição do método);
O tipo de retorno (já está na própria definição do método);
Você deve incluir:
Para que serve a rotina, ou no mínimo o que ela faz (“como ela faz” normalmente pode ser inferido do código, a menos que você use algum algoritmo específico e complexo).
O que é muito legal você incluir, embora não seja obrigatório:
Um exemplo de uso.
/**
* Converte um vetor de inteiros para uma string com os números
* separados por tabs.
* <p> Exemplo: {13,45,98} -> "13\t45\t98"
* @param vet um vetor de inteiros.
* @return Uma string com os inteiros, separados por tabs.
*/
public static String converteVetorString(int[] vet) {
StringBuffer retorno = new StringBuffer(); // prefira usar StringBuffer ou StringBuilder
// Pensando "ao contrário..."
if (vet.length >= 1) {
retorno.append (vet[0]);
}
for (int i = 1; i < vet.length; i++) {
retorno.append ("\t").append (vet[i]);
}
return retorno.toString();
}
Uma vez eu fui tentar criar uma string usando “+=”.
Detalhe: era um programa muito parecido com o seu, só que o array tinha 1 milhão de inteiros - não é nada absurdo em Java.
Eu comecei usando o jeitinho que você fez, só que a máquina simplesmente pediu água.
Quando eu usei o StringBuffer (modernamente você usaria StringBuilder), a criação da string foi virtualmente instantânea.
Dando um exemplo extremo da diferença do uso de StringBuffer (ou StringBuilder) e o "+=".
Veja que com StringBuffer conseguimos concatenar o milhão de números em cerca de 0,5 segundo.
Na minha máquina não tive paciência de ver se usando só String funcionava mesmo.
import java.util.*;
class TesteStringBuilder {
int[] valores = new int [1000000];
public void setup() {
Random r = new Random();
r.setSeed (1); // isto faz com que gere sempre a mesma seqüência
for (int i = 0; i < valores.length; ++i) {
valores[i] = r.nextInt();
}
}
public void teste1() {
Timer tm = new Timer();
final long t = System.currentTimeMillis();
tm.scheduleAtFixedRate(new TimerTask() {
public void run() {
System.out.printf ("%7d ms - %10d\r", System.currentTimeMillis() - t, cnt);
}
}, 0, 100);
String ret = "";
for (int i = 0; i < valores.length; ++i) {
ret += valores[i] + "\t";
cnt = i;
}
System.out.println();
System.out.println ("O teste 1 levou " + (System.currentTimeMillis() - t) + "ms");
tm.cancel();
}
private volatile int cnt;
public void teste2() {
Timer tm = new Timer();
final long t = System.currentTimeMillis();
tm.scheduleAtFixedRate(new TimerTask() {
public void run() {
System.out.printf ("%7d ms - %10d\r", System.currentTimeMillis() - t, cnt);
}
}, 0, 100);
StringBuffer sb = new StringBuffer ();
for (int i = 0; i < valores.length; ++i) {
sb.append(valores[i]).append("\t");
cnt = i;
}
String ret = sb.toString();
System.out.println();
System.out.println ("O teste 2 levou " + (System.currentTimeMillis() - t) + "ms");
tm.cancel();
}
public static void main(String[] args) {
TesteStringBuilder tsb = new TesteStringBuilder ();
tsb.setup();
tsb.teste2();
tsb.teste1();
}
}