En las plataformas móviles parece que es aún más útil usar estas estructuras por lo de ahorrar tiempo de proceso y no gastar bateria.
El for-each puede usarse para colecciones que implementan el interfaz Iterable y para Arrays. Con las colecciones, cada elemento implementa en su interfaz las llamadas a hasNext() y next(). Con un ArrayList, un for escrito a mano es cerca de 3 veces más rápido, y para las colecciones el for-each será exáctamente equivalente al uso del for con los ArrayList.
Ejemplos:
static class Foo {
int mSplat;
}
Foo[] mArray = ...
public void zero() {
int sum = 0;
for (int i = 0; i < mArray.length; ++i) {
sum += mArray[i].mSplat;
}
}
public void one() {
int sum = 0;
Foo[] localArray = mArray;
int len = localArray.length;
for (int i = 0; i < len; ++i) {
sum += localArray[i].mSplat;
}
}
public void two() {
int sum = 0;
for (Foo a : mArray) {
sum += a.mSplat;
}
}
int mSplat;
}
Foo[] mArray = ...
public void zero() {
int sum = 0;
for (int i = 0; i < mArray.length; ++i) {
sum += mArray[i].mSplat;
}
}
public void one() {
int sum = 0;
Foo[] localArray = mArray;
int len = localArray.length;
for (int i = 0; i < len; ++i) {
sum += localArray[i].mSplat;
}
}
public void two() {
int sum = 0;
for (Foo a : mArray) {
sum += a.mSplat;
}
}
- zero() es la más lenta porque el JIT no puede optimizar el coste de pedir el tamaño del array cada iteración.
- one() es más rápida. Guarda todo en variables locales, evitando tener que ir a buscarlas fuera del ámbito de la función. Y optimiza la petición del tamaño del Array.
- two() es la más rápida para dispositivos sin JIT, y distinguiblemente mejor que la one() para los dispositivos con JIT. Usa el for-each introducido en la versión 1.5 del lenguaje de programación Java.
En definitiva que me tendré que acostumbrar a usar for-each por defecto, salvo excepciones que necesite algo especial en iteraciones con ArrayList.
JIT: Compilador al vuelo de la máquina virtual Dalvik (Just In Time compiler).
Texto original y ejemplos via Use Enhanced For Loop Syntax
No hay comentarios:
Publicar un comentario