Quem devo chamar para ordenar?
R: Collections.sort()
O que o Colletions.sort() precisa pra funcionar?
R: Ele precisa de um parâmetro que sejam implementado com Comparable<T> (interface)
O que é dentro da interface Comparable ?
R: <> se chama diamante, ele serve pra especificar com qual tipo você vai trabalhar, mas porque T ? , T é um é um anotação genérico, poderia ter Sido (A, B, C, D etc... (Quando <T> está presente significa que devemos informar qual tipo iremos trabalhar, <String>, <Produto>, <QualquerOutraCoisa> ) e somos obrigado a passar com que tipo iremos trabalhar.
O que a interface Comparable obriga implementar?
R: um método chamado compareTo( T o );
O que é (T) e (o) do compareTo();
R: T é tipo e o outroObjeto do mesmo tipo.
Quem é outro Objeto?
R: Relaxa, ganhafoto, quem cuida dessa parte é o sort, ele vai cuidar de tudo, vai pegar o outro objeto da lista e vai fazer ordenação, tudo que você tem que fazer é passar o que você quer comparar e como vai funcionar essa comparação (compareTo).
compareTo() já esta presente em String.
R: por isso se você for trabalhar com outro tipo, você vai ter que sobrescrever este método para explicar quem após, quem não se mexe, quem fica atrás na ordenação.
sort cuida desses loops internos.
R: você só tem que configurar (-1, 0, 1) no compare se não for uma String.