У меня проблема с ArrayList. Я использую ArrayList, как это:ArrayList indexOf() возвращает неверный индекс?
private ArrayList<Playlist> mPlaylists;
где Playlist класс наследуется от другого ArrayList. я сделать следующее:
p = new Playlist(...some parameters...);
mPlaylists.add(p);
Позже, когда я использую «р», чтобы получить индекс в списке:
int index = mPlaylists.indexOf(p);
индекс «1» возвращается, даже если инспекция из список ясно показывает, что это индекс «4».
Кто-нибудь знает, почему это не удается? Спасибо.
B.R. Morten
Edit: же проблема без IndexOf(), с помощью равенства():
private int GetIndex(Playlist playlist) {
for (int i = 0; i < mPlaylists.size(); i++) {
if (mPlaylists.get(i).equals(playlist)) {
return i;
}
}
return -1;
}
правка: Это работает !:
private int getIndex(Playlist playlist) {
for (int i = 0; i < mPlaylists.size(); i++) {
if (mPlaylists.get(i) == playlist) {
return i;
}
}
return -1;
}
Решение: Как и было предложено, я изменил класс Playlist, чтобы не допустить это из ArrayList, а скорее для хранения экземпляра в частном порядке. Оказалось, что мне нужно было реализовать только 4 метода ArrayList.
Это трюк; Теперь indexOf() возвращает правильный объект!
Спасибо всем участникам!
Что находится в mPlaylists.get (1); ? Вы переопределили 'equals()' в 'Playlist' - что-нибудь напугало? –
Включает ли список воспроизведения список индекса ArrayList? –
Мой первоначальный ответ: «у вас нет, вы думаете, что у вас есть», а затем «один p считает, что это другой p (или не знает, что это такое)». – 2010-06-24 20:46:00