Oi Thiago,
O método contains faz uma chamada implícita ao método equals dos objetos Java. A implementação padrão do método equals só verifica a referência dos objetos para saber se é o mesmo objeto, mas, quando queremos que essa comparação seja feita de outra forma, utilizando informações dos objetos para essa finalidade, necessitamos subrescrever o método equals com a regra que faz sentido na comparação.
Só para reforçar, quando invocamos o método contains este faz uso do método equals para identificar se o objeto passado como parametro é igual a algum objeto da lista.
Abs