Supongo que mapOverlays
tiene una referencia ArrayList
.
Si mapOverlays
está declarada como una List
o ArrayList
, a continuación, mapOverlays.remove(n)
se referirá al método remove(int)
que elimina el objeto en un offset dado. (Hasta aquí todo bien ...)
Cuando se quita el elemento nth
de una matriz mediante remove(int)
, los elementos empezando en la posición n + 1
y sobre todo son movidos hacia abajo por uno. Entonces, lo que estás haciendo en realidad no funcionará en la mayoría de los casos. (De hecho, es probable que eliminar aproximadamente la mitad de los elementos que desea eliminar y, a continuación, obtener un IndexOutOfBoundsException
.)
La mejor solución es o bien:
for (int i = size - 1; i > 0; i--) {
mapOverlays.remove(i);
}
o
tmp = mapOverlays.remove(0);
mapOverlays.clear();
mapOverlays.add(tmp);
(Tenga en cuenta que la primera solución siempre se elimina del final de la lista, evitando la necesidad de copiar elementos para completar el agujero dejado por el elemento eliminado. El rendimiento diferente es significativo para una ArrayList grande)
Sin embargo, si mapOverlays
se declara como Collection
, remove(n)
se vinculará a la sobrecarga remove(<E>)
que elimina el objeto que coincide con su argumento. Dependiendo del tipo declarado, esto le dará un error de compilación, o el int
se autoboxeará como Integer
y usted (probablemente) no eliminará nada.GOTCHA!
Por lo que yo puedo entender, usted está recogiendo el tamaño de una lista llamada itemizedOverlay, y trabajar en otra lista llamada mapOverlays. Espero que eso sea normal ;-) – Agemen
Lo siento, un error tipográfico, las matrices son las mismas, he editado – dfilkovi