Cuando su clase implementa Comparable, el método compareTo
de la clase define el orden "natural" de ese objeto. Ese método está contractualmente obligado (aunque no exigido) a estar en línea con otros métodos en ese objeto, como un 0 siempre se debe devolver para los objetos cuando las comparaciones .equals()
devuelven verdadero.
A Comparator es su propia definición de cómo comparar dos objetos, y se puede usar para comparar objetos de una manera que podría no coincidir con el orden natural.
Por ejemplo, las cadenas generalmente se comparan alfabéticamente. Por lo tanto, el "a".compareTo("b")
usaría comparaciones alfabéticas. Si quisiera comparar cadenas en longitud, necesitaría escribir un comparador personalizado.
En resumen, no hay mucha diferencia. Ambos son fines a medios similares. En general, implementar es comparable para el orden natural, (la definición de orden natural está obviamente abierta a la interpretación), y escribir un comparador para otras necesidades de clasificación o comparación.
http://grdurand.com/static/presentation_four/comparable.html –
También un duplicado de: [Cuándo usar Comparable y Comparator] (http://stackoverflow.com/q/2266827/642706). –
Excelente enlace de ejemplo. Simple y claro. Lee. – Androidster