ArrayList indexOf()返回错误的索引?

Mor*_*ess 9 java android arraylist

我有ArrayList的问题.我正在使用像这样的ArrayList:

private ArrayList<Playlist> mPlaylists;
Run Code Online (Sandbox Code Playgroud)

其中播放列表是从另一个ArrayList继承的类.我做以下事情:

p = new Playlist(...some parameters...);
mPlaylists.add(p);
Run Code Online (Sandbox Code Playgroud)

后来,当我使用'p'来获取列表中的索引时:

int index = mPlaylists.indexOf(p);
Run Code Online (Sandbox Code Playgroud)

即使检查列表清楚地显示它的索引为'4',也会返回索引'1'.

有人知道为什么会失败吗?谢谢.

BR Morten

编辑: 没有indexOf()的相同问题,使用equals():

private int GetIndex(Playlist playlist) {
    for (int i = 0; i < mPlaylists.size(); i++) {
        if (mPlaylists.get(i).equals(playlist)) {
            return i;
        }
    }
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

新编辑: 这个工作!:

private int getIndex(Playlist playlist) {
    for (int i = 0; i < mPlaylists.size(); i++) {
        if (mPlaylists.get(i) == playlist) {
            return i;
        }
    }
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

解决方案: 正如建议的那样,我将Playlist类更改为不从ArrayList启用,而是将私有实例保留.事实证明,我只需要实现4个ArrayList方法.

这样做的伎俩; 现在indexOf()返回正确的对象!

感谢所有贡献者!

Osc*_*Ryz 7

最有可能你PlayList搞砸使用默认的ArrayList equals实现,因为该方法indexOf计算到类似:

indexOf(Object o) 
   if( o == null ) then iterate until null is found and return that index
   if( o != null ) iterate until o.equals( array[i] ) is found and return taht index
   else return -1 
end
Run Code Online (Sandbox Code Playgroud)

所以,你正在使用.equals方法做一些有趣的事情,或者当你认为它在最后时你不小心在列表中插入另一个元素.

编辑

根据你的编辑...看?你的.equals()方法破了.

考虑做一个好的评论,并确保它符合Object.equals中定义的描述