Java: Comparable vs Comparador

Posibles duplicados:
diferencia entre compare () y compareTo ()
Java: ¿Cuál es la diferencia entre implementar Comparable y Comparator?

¿Cuáles son las diferencias clave entre Comparable y Comparator?

¿y cuál es preferido sobre el otro en qué escenarios?

Gracias

Actualizado – ¡BUEN ENLACE CON EJEMPLO!

http://www.digizol.com/2008/07/java-sorting-comparator-vs-comparable.html

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 que siempre se debe devolver un 0 para objetos cuando las comparaciones de .equals() devuelven verdadero.

Un Comparador 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.

Comparator proporciona una forma de proporcionar una lógica de comparación personalizada para tipos sobre los que no tiene control.

Comparable permite especificar cómo se comparan los objetos que está implementando.

Obviamente, si no tiene control sobre una clase (o si desea proporcionar múltiples formas de comparar objetos sobre los que sí tiene control), utilice el Comparator .

De lo contrario, puede usar Comparable .