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