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?
- ¿Cómo utilizar un parámetro de salida en Java?
- Vincular método a un botón en android
- Android sin Java
- ¿El iterador de lista provoca asignaciones de montón?
- Recuperar el contexto de llamada en un BroadcastReceiver ()
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?
- Doclava - ¿Cómo generar versionado xml?
- Finite State Machine (FSM) y Java de Android
- Cámara Android: ¿Hilos? Que debe hacer lo que
- ¿Cómo evito que Android Studio colapse automáticamente mis paquetes en la navegación de proyectos?
- ¿Por qué Android no limpia la memoria después de terminar la actividad?
- Prueba de unidad de presentador con RxJava CompositeSubscription
- RxAndroid: cambios de interfaz de usuario en el subproceso Schedulers.io ()
- Problema de liberación de Android MediaRecorder () y la captura de vídeo no está en modo retrato
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
.
- Cómo prevenir el cambio de tamaño de fuente del sistema efectos a la aplicación de Android?
- Algunas preguntas sobre OAuth y Android