O Comparable é uma interface que serve para você dizer que um determinado objeto tem uma ordem natural e, portanto, pode ser ordenado. Note que ele associa essa característica a sua classe. Por exemplo:
public class Pessoa implements Comparable<Pessoa>
{
private String nome;
private int idade;
public Pessoa(String nome, int idade) {
this.nome = nome;
this.idade = idade;
}
public int getIdade() {return idade;}
public int getNome() {return nome;}
public int compareTo(Pessoa other) {
return Collator.getInstance().compareTo(nome, other.nome);
}
}
Com a classe pessoa dessa forma, poderíamos criar uma lista de pessoas e ordena-las usando:
Collections.sort(listaDePessoas);
Simples! O java, vendo que uma pessoa é comparável, consegue fazer a ordenação sem precisar de mais nada.
Agora, o que aconteceria se tivéssemos que ordenar as pessoas em ordem de idade, ou na ordem alfabética reversa, sem alterar a ordenação “default” de nosso programa?
Para isso, damos ao java um comparador, ou seja, um objeto da classe Comparator.
public class ComparadorDeIdadesDaPessoa implements Comparator<Pessoa> {
public int compareTo(Pessoa aPerson, Pessoa anotherPerson) {
return aPerson.idade - anotherPerson.idade;
}
}
Para ordenar as pessoas por idade, agora precisaríamos só fazer:
Collections.sort(listaDePessoas, new ComparadorDeIdadesDaPessoa());
Note que, como nosso colega definiu, o Comparator é usado em outra classe, nesse caso o ComparadorDeIdadesDaPessoa, enquanto o Comparable serve para dizer que nossa classe, Pessoa, tem uma ordem natural e portanto pode ser comparada.