Tengo un problema con ArrayList. Estoy usando ArrayList como esto:ArrayList indexOf() devuelve el índice incorrecto?
private ArrayList<Playlist> mPlaylists;
donde Playlist es una clase heredada de otra ArrayList. hago lo siguiente:
p = new Playlist(...some parameters...);
mPlaylists.add(p);
Más tarde, cuando se utiliza 'p' para obtener el índice de la lista:
int index = mPlaylists.indexOf(p);
se devuelve un índice de '1', a pesar de que la inspección de la la lista muestra claramente que es el índice '4'.
¿Alguien sabe por qué esto falla? Gracias.
B.R. Morten
Editar: mismo problema sin indexOf(), usando equals():
private int GetIndex(Playlist playlist) {
for (int i = 0; i < mPlaylists.size(); i++) {
if (mPlaylists.get(i).equals(playlist)) {
return i;
}
}
return -1;
}
Nueva edición: Esto funciona !:
private int getIndex(Playlist playlist) {
for (int i = 0; i < mPlaylists.size(); i++) {
if (mPlaylists.get(i) == playlist) {
return i;
}
}
return -1;
}
de soluciones: Según lo sugerido, cambié la clase Playlist para no enher es de ArrayList, sino que guarda una instancia de forma privada. Resultó que solo tuve que implementar 4 métodos ArrayList.
Esto hace el truco; ¡Ahora indexOf() devuelve el objeto correcto!
¡Gracias a todos los contribuyentes!
¿Qué hay en mPlaylists.get (1); ? ¿Ha anulado 'equals()' en 'Playlist' - ¿Hay algo raro allí? –
¿La lista de reproducción prevalece sobre el índice de ArrayList? –
Mi respuesta inicial es "lo que tienes no es lo que crees que tienes" seguido de "uno p piensa que es otro p (o no sabe lo que es)". –