Java ArrayList IndexOf - Localizando índice de objetos

Vamos dizer que eu tenho uma aula

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

E eu adiciono alguns objetos Data a um 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 que indexOf não encontra isto ?:

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

É indexOf melhor do que passar por toda a lista de matriz eu mesmo? Ou eu estou esquecendo de alguma coisa.