Continuando a discussão do Usando compareTo:
Então para o metodo compareTo e compareToIgnoreCase: Se o valor for igual a 0 não funciona(false), se o valor for maior que 0 retorna 1(true) e se ele for negativo retorna -1.
Explique melhor como não funciona. O que está acontecendo?
Complementando: o compareTo da String retorna 0 se igual, ou maior ou menor caso diferente. Não quer dizer que vai retornar 1 ou -1 quando diferente. Vai depender da diferença entre as Strings comparadas.
Bom, a interface collection ou qualquer outra API não sabe como comparar as classes que você passou para ele, quando você implementa a interface compare, está simplesmente indicando como fazer esta comparação. Considerando isso, ao dar condição de -1, 0, 1 com sua lógica implementada .