J'ai un problème avec ArrayList. J'utilise ArrayList comme ceci:ArrayList indexOf() renvoie un mauvais index?
private ArrayList<Playlist> mPlaylists;
où Playlist est une classe héritée d'une autre ArrayList. Je fais ce qui suit:
p = new Playlist(...some parameters...);
mPlaylists.add(p);
Plus tard, quand j'utilise 'p' pour obtenir l'index dans la liste:
int index = mPlaylists.indexOf(p);
un indice de '1' est retourné, même si l'inspection de la liste montre clairement que c'est l'index '4'.
Est-ce que quelqu'un sait pourquoi cela a échoué? Merci.
B.R. Morten
Modifier: Même problème sans indexOf(), en utilisant equals():
private int GetIndex(Playlist playlist) {
for (int i = 0; i < mPlaylists.size(); i++) {
if (mPlaylists.get(i).equals(playlist)) {
return i;
}
}
return -1;
}
Nouvelle édition: Cela fonctionne !:
private int getIndex(Playlist playlist) {
for (int i = 0; i < mPlaylists.size(); i++) {
if (mPlaylists.get(i) == playlist) {
return i;
}
}
return -1;
}
Solution: Comme suggéré, j'ai changé la classe Playlist pour ne pas entrer à partir de ArrayList, mais en gardant une instance en privé. Il s'est avéré que je devais seulement implémenter 4 méthodes ArrayList.
Cela fait l'affaire; Maintenant indexOf() retourne l'objet correct!
Merci à tous les contributeurs!
Qu'est-ce que mPlaylists.get (1); ? Avez-vous remplacé 'equals()' dans 'Playlist' - quelque chose de funky là-bas? –
La liste de lecture remplace-t-elle l'indexOf de ArrayList? –
Ma réponse initiale est "le p que vous avez n'est pas le p que vous pensez avoir" suivi par "un p pense que c'est un autre p (ou ne sait pas ce que c'est)". –