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

标签 java android arraylist

我对 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/

相关文章:

android - Gradle:有和没有<<运算符的定义任务的区别

Java arraylist 访问元素以计算平均值

java - 将 map 添加到列表会导致多次添加相同的 map

java - 如何覆盖ArrayList 的ToString 方法,使逗号分隔符被其他符号替换?

android - 安装未能完成 session ...签名不一致 - Android

android - 从 Android 中的另一个线程进行 Retrofit 和 Realm 访问

java - 如何从单独的类获取用户输入

java - 如何单击随机网页元素?

java - Android Studio 醉了吗?

java - 如何在 Jmeter 中使用 Java 加载公钥?