Java ArrayList IndexOf-查找对象索引

可以说我有一堂课

public class Data{

public int k;

public int l;

public Data(int k, int l){

this.k = k;

this.l = l;

}

public boolean equals(Date m){

if(this.k == m.k && this.l = m.l)

return true;

return false;

}

}

我将一些数据对象添加到ArrayList中:

ArrayList<Data> holder = new ArrayList<Data>;

Data one = new Data(0,0);

Data two = new Data(0,4);

Data three = new Data(0,5);

为什么indexOf找不到这个?:

holder.indexOf(new Data(0,4)); //returns -1

indexOf是否比我自己遍历整个数组列表更好?还是我错过了一些东西。

回答:

indexOf()方法 经过整个列表。这是Java 7源代码的摘录:

public int indexOf(Object o) {

if (o == null) {

for (int i = 0; i < size; i++)

if (elementData[i]==null)

return i;

} else {

for (int i = 0; i < size; i++)

if (o.equals(elementData[i]))

return i;

}

return -1;

}

让Java通过它比自己编写它更好。只要确保您的equals方法足以找到所需的对象即可。您还需要覆盖hashCode()

我不会写出您的equals方法,但是我建议您至少:

  • 检查是否为空
  • 测试您要比较的实例是否相同
  • 你不需要做if(boolean_expr) { return true; }; 只需返回布尔表达式。
  • 确保您实际上覆盖了equals方法-该方法的签名需要一个Object参数,而不是Date

以上是 Java ArrayList IndexOf-查找对象索引 的全部内容, 来源链接: utcz.com/qa/424016.html

回到顶部