我对 ArrayList 有疑问。我像这样使用 ArrayList:
private ArrayList<Playlist> mPlaylists;
其中Playlist是继承自另一个ArrayList的类。 我执行以下操作:
p = new Playlist(...some parameters...);
mPlaylists.add(p);
稍后,当我使用“p”获取列表中的索引时:
int index = mPlaylists.indexOf(p);
返回索引“1”,即使列表的检查清楚地表明它是索引“4”。
有人知道为什么会失败吗? 谢谢。
B.R. 莫腾
编辑: 没有 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;
}
新编辑: 这行得通!:
private int getIndex(Playlist playlist) {
for (int i = 0; i < mPlaylists.size(); i++) {
if (mPlaylists.get(i) == playlist) {
return i;
}
}
return -1;
}
解决方案: 正如建议的那样,我将播放列表类更改为不从 ArrayList 继承,而是私下保留一个实例。事实证明,我只需要实现 4 个 ArrayList 方法。
这就是诀窍;现在 indexOf() 返回正确的对象!
感谢所有贡献者!
最佳答案
很可能您的 PlayList
与默认的 ArrayList equals
实现混淆了,因为 indexOf
的方式是 calculated 类似于:
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
因此,您正在使用 .equals 方法做一些有趣的事情,或者您不小心在列表中插入了另一个您认为已在末尾的元素。
编辑
根据您的编辑...看到了吗?您的 .equals()
方法已损坏。
考虑进行良好的审核并确保其符合 Object.equals 中定义的描述
关于java - ArrayList indexOf() 返回错误的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3113696/