Java ArrayList IndexOf - Finding Object Index
arraylist, java
Solution
The `indexOf()` method does go through the entire list. Here's an excerpt from Java 7 source code:
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;
}
It'd be better to let Java go through it than write it yourself. Just make sure that your `equals` method is sufficient at finding the object you want. You'll also want to override `hashCode()` as well.
I won't write your `equals` method out, but I would recommend that you at least:
- Check for null
- Test if the instances you're comparing are the same
- You don't need to do `if(boolean_expr) { return true; }`; just return the boolean expression.
- Make sure you're actually overriding your `equals` method - the signature of that requires an `Object` parameter, not `Date`.
Problem
Lets say I have a class ``` 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; } } ``` And I add a few Data objects to a 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); ``` Why does indexOf not find this?: ``` holder.indexOf(new Data(0,4)); //returns -1 ``` Is indexOf any better than going through the whole array list myself? Or am I missing something.