Fala Diego, tudo certo?
Primeiro temos que entender como um Comparator se comporta:
quando passamos dois parâmetros para essa função, queremos ordená-la de acordo com os nossos critérios, correto?
Acontece que para o compilador entender qual a conta que deve ser ordenada prioritariamente, retornam-se valores diferentes.
Se você der uma olhadinha ao passar o mouse por cima da função vai ter uma explicação mais correta do que quero dizer. Enfim, a ordem é a seguinte:
Se o objeto passado como parâmetro O1 vier antes do O2, retorna-se um valor positivo (independente do valor). Caso contrário, retorna-se um valor negativo. Se os objetos possuem a mesma relevância, retorna-se 0.
Isso é o mesmo que retornar por exemplo a seguinte expressão:
return c1.getNumero()-c2.getNumero();
Analisando a expressão acima, sabemos que se o número da conta1 for maior, o valor retornado será positivo. Caso seja menor, o número será negativo. Caso seja igual, o valor retornado será 0. A partir desse valor retornado é que é feita a comparação, se um objeto é mais relevante que o outro de acordo com o critério.