métodos en foreach y para bucles en java

Mi pregunta es acerca de la optimización en java utilizando el compilador de Android. Will map.values ​​() en el siguiente se llamará cada iteración, o el compilador de Android lo optimizará.

LinkedHashMap<String, Object> map; for (Object object : map.values()) { //do something with object } 

Del mismo modo, aquí hay otro ejemplo. aList.size () se llamará 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?

En el primer ejemplo, map.values() será evaluado 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, aList.size() se llamará cada vez que se evalúa la prueba. Para la legibilidad, sería mejor codificarlo como:

 for (Object object : aList) { // do something with object } 

Sin embargo, según los documentos Android , esto será más lento. Suponiendo que no está cambiando el tamaño de la lista dentro del bucle, lo más rápido de otra manera sería retirar 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 Android vinculados por encima de decir por un factor de 3) si aList pasa a ser un ArrayList , pero es probable que sea más lento (posiblemente por un montón) para un LinkedList . Todo depende exactamente de qué clase de List implementación es la clase aList .

  • RxJava file.createNewFile () devuelve siempre TRUE
  • Android instrumentación prueba java.lang.UnsatisfiedLinkError en el uso de AndroidJunitRunner y AndroidJUnit4
  • Cómo obtener una fecha con formato en milisegundos?
  • ¿Cómo proceso las emisiones que se enviaron mientras mi actividad se detuvo?
  • ¿Es posible detectar de forma fiable en tiempo de ejecución qué tienda instaló una aplicación de Android (Google Play o Amazon Market)?
  • ¿Fuerza el androide para enviar paquetes UDP inmediatamente?
  • Realm: Iterando un RealmObject y borrando un campo ArrayList
  • ¿Cómo puedo ejecutar esta clase en el hilo de interfaz de usuario?
  • Cómo llamar a un json webservice a través de android
  • Intermitentes marcos lentos en Android OpenGL ES 2.0
  • Leer WCF REST fecha de android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.