En el código, he hecho dos bucles for:
for(int y = 0;i < HEIGHT; y++){ for(int y = 0;i < WIDTH; y++){ //lots of switch cases } }y me pregunto, ¿es más rápido usar uno para bucle como este? :
for(int i = 0;i < HEIGHT*WIDTH; i++){ //lots of switch cases }El concepto erróneo habitual de los novatos: el rendimiento de Java no surge del "código fuente inteligente de Java".
La parte clave es: las optimizaciones que hace el compilador justo a tiempo en tiempo de ejecución. Y eso comienza con: el JIT que decide si el código se invoca con la frecuencia suficiente para que valga la pena optimizarlo.
Por lo tanto, la respuesta real a (la mayoría) de las preguntas sobre el rendimiento de Java es:
(y ese tercer punto, se da cuenta de que debido a que sus usuarios/pruebas revelan un "mal rendimiento", y luego realizó muchas mediciones para identificar la verdadera causa raíz de ese problema)
Por lo tanto, como se dijo: concéntrese en escribir un código correcto que sea fácil de leer y comprender, y no se preocupe por el rendimiento hasta mucho más tarde.
No.
Como se mencionó, debe determinar su condición final antes de usar un ciclo, lo que significa que debe tener
int total = height*width; for( int i=0; i < total; ++i ) { // ... }para que el total no se calcule constantemente durante el ciclo. Dicho esto, todos lo hacen y espero que el compilador optimice su versión en esta versión de todos modos.
El verdadero problema, como yo lo veo, es que en el bucle es posible que deba invertir el cálculo del total , lo que significa que es posible que deba tener
int total = height*width; for( int i=0; i < total; ++i ) { int x = total / width; int y = total % height; call(x,y); }Esto sería más lento que
for( int i=0; i < width; ++i ) { for( int j=0; i < height; ++i ) { call(i,j); } }que debería ser más rápido. Esto no tiene en cuenta las "operaciones de bifurcación" en las CPU. Consulte Programación sin sucursales: ¿Por qué "si" es Sloowww... y qué podemos hacer al respecto? .
EDITAR: Y sí, el comentario más destacado en este hilo es que deberías preocuparte por la legibilidad mucho más por el rendimiento.