Java ArrayList IndexOf - Búsqueda de índice de objetos

Digamos que tengo una clase

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;
    }
}

Y agrego algunos objetos de datos a un 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);

¿Por qué indexOf no encuentra esto ?:

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

¿Es indexOf mejor que ir a través de toda la lista de arreglos? O me estoy perdiendo algo.

Respuestas a la pregunta(4)

Su respuesta a la pregunta