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.

Original source