Fiz uma pesquisa para tentar descobrir quais das duas estruturas de repetição é a mais rápida e quando é melhor usar o while e quando é melhor usar o for.
O while é melhor utilizado quando você não sabe quantas vezes ele vai ser executado (dá para fazer com o for também), e o for é ideial quando se precisa de um contador (também é possível usando o while).
Resolvi então fazer um comparativo entre o while e o for em termos de performance e cheguei ao seguinte resultado:
o for é sempre mais rápido quando concatena String.
[code]public class TesteString {
static int fim = 12000;
public static void main(String[] args) {
System.out.println("-------String---------");
long time = -System.currentTimeMillis();
stringFor();
time += System.currentTimeMillis();
System.out.println("For: " + ((double) time / 600));
time = -System.currentTimeMillis();
stringWhile();
time += System.currentTimeMillis();
System.out.println("While: " + ((double) time / 600));
}
public static void stringFor() {
String texto = "";
for (int i = 0; i < fim; i++) {
texto += "Java";
}
}
public static void stringWhile() {
String texto = "";
int i = 0;
while (i < fim) {
texto += "Java";
i++;
}
}
}
[/code]
e o while é sempre mais rápido quando se concatena StringBuffer.
public class TesteStringBuffer {
static int fim = 4000000;
public static void main(String[] args) {
stringBuffer();
}
public static void stringBuffer() {
System.out.println("-------StringBuffer---------");
long time = -System.currentTimeMillis();
stringBufferFor();
time += System.currentTimeMillis();
System.out.println("For: " + time);
time = -System.currentTimeMillis();
stringBufferWhile();
time += System.currentTimeMillis();
System.out.println("While: " + time);
}
public static void stringBufferFor() {
StringBuffer texto = new StringBuffer("");
for (int i = 0; i < fim; i++) {
texto.append("Java");
}
}
public static void stringBufferWhile() {
StringBuffer texto = new StringBuffer("");
int i = 0;
while (i < fim) {
texto.append("Java");
i++;
}
}
}
Por que isso acontece? alguém pode me dizer?
Obrigado.