recorre - Métodos en foreach y para bucles en java.
for loop java español (1)
En el primer ejemplo, map.values()
se evaluará una vez. De acuerdo con la Sección 14.4.2 de la Especificación del lenguaje Java , es equivalente a:
for (Iterator<Object> i = map.values().iterator(); i.hasNext(); ) {
Object object = i.next();
// do something with object
}
En el segundo, se aList.size()
cada vez que se evalúe la prueba. Para facilitar la lectura, sería mejor codificarlo como:
for (Object object : aList) {
// do something with object
}
Sin embargo, según los documentos de Android , esto será más lento. Suponiendo que no está cambiando el tamaño de la lista dentro del bucle, la forma más rápida sería sacar el tamaño de la lista antes del bucle:
final int size = aList.size();
for (int i = 0; i < size; i++)
{
object = aList.get(i);
//do something with i
}
Esto será sustancialmente más rápido (los documentos de Android vinculados a lo anterior dicen por un factor de 3) si aList
resulta ser una ArrayList
, pero es probable que sea más lenta (posiblemente mucho) para una LinkedList
. Todo depende exactamente de qué tipo de clase de implementación de aList
es aList
.
Mi pregunta es sobre la optimización en java usando el compilador de Android. Map.values () se llamará en cada una de las siguientes iteraciones, o el compilador de Android lo optimizará.
LinkedHashMap<String, Object> map;
for (Object object : map.values())
{
//do something with object
}
Igualmente aquí hay otro ejemplo. ¿Se llamará aList.size () cada iteración?
List<Object> aList;
for (int i = 0; i < aList.size(); i++)
{
object = aList.get(i);
//do something with i
}
Y después de todo esto, ¿realmente importa si llama a los métodos cada iteración? ¿Map.values () y List.size () hacen mucho de cualquier cosa?