Ordenamiento mediante un objeto 

Comparator

En la fi gura 19.10 se crea una clase 

Comparator

 personalizada, llamada 

ComparadorTiempo

, la cual implementa 

a la interfaz 

Comparator

 para comparar dos objetos 

Tiempo2

. La clase 

Tiempo2

, declarada en la fi gura 8.5, repre-

senta tiempos con horas, minutos y segundos.

La clase 

ComparadorTiempo

 implementa a la interfaz 

Comparator

, un tipo genérico que recibe un argu-

mento (en este caso, 

Tiempo2

). El método 

compare

 (líneas 7 a 26) realiza comparaciones entre objetos 

Tiempo2

.

En la línea 9 se comparan las dos horas de los objetos 

Tiempo2

. Si las horas son distintas (línea 12), entonces 

devolvemos este valor. Si el valor es positivo, entonces la primera hora es mayor que la segunda y el primer tiempo 
es mayor que el segundo. Si este valor es negativo, entonces la primera hora es menor que la segunda y el primer 
tiempo es menor que el segundo. Si este valor es cero, las horas son iguales y debemos evaluar los minutos (y tal 
vez los segundos) para determinar cuál tiempo es mayor.

En la fi gura 19.11 se ordena una lista mediante el uso de la clase 

Comparator

 personalizada, llamada 

Com-

paradorTiempo

. En la línea 11 se crea un objeto 

ArrayList

 de objetos 

Tiempo2

. Recuerde que 

ArrayList

 y 

List

 son tipos genéricos y aceptan un argumento de tipo que especifi ca el tipo de los elementos de la colección. 

En las líneas 13 a 17 se crean cinco objetos 

Tiempo2

 y se agregan a esta lista. En la línea 23 se hace una llamada 

al método 

sort

, y le pasamos un objeto de nuestra clase 

ComparadorTiempo

 (fi gura 19.10).

 1 

// Fig. 19.10: ComparadorTiempo.java

2

// Clase Comparator personalizada que compara dos objetos Tiempo2.

3

import

 java.util.Comparator;

 4 
 5 

public class

 ComparadorTiempo 

implements

 Comparator< Tiempo2 > 

 6 

{

 7  

public int

 compare( Tiempo2 tiempo1, Tiempo2 tiempo2 )

 8  

{

 9   

int

 compararHora = tiempo1.obtenerHora() - tiempo2.obtenerHora(); 

// compara la hora

10

 11  

 

// evalúa la hora primero

12   

if

 ( compararHora != 

0

 )

 

13    

return

 compararHora;

 14 
 15  

 

int

 comparaMinuto = 

 

16    

tiempo1.obtenerMinuto() - tiempo2.obtenerMinuto();

 // compara el minuto

17

 18  

 

// después evalúa el minuto

19   

if

 ( comparaMinuto != 

0

 )

 

20    

return

 comparaMinuto;

 21 
 22  

 

int

 compararSegundo = 

 

23    

tiempo1.obtenerSegundo() - tiempo2.obtenerSegundo(); 

// compara el segundo

24

 25  

 

return

 compararSegundo; 

// devuelve el resultado de comparar los segundos

26

}

 // fin del método compare

27

}

// fin de la clase ComparadorTiempo

Figura 19.10  

|  Clase 

Comparator

 personalizada que compara dos objetos 

Tiempo2

.

Figura 19.9 

 |  El método 

sort

 de 

Collections

 con un objeto 

Comparator

. (Parte 2 de 2).

Elementos del arreglo desordenados:
[Corazones, Diamantes, Bastos, Espadas]
Elementos de lista ordenados:
[Espadas, Diamantes, Corazones, Bastos]

19.6 Algoritmos de las colecciones 

811

19_MAQ_CAP_19_DEITEL.indd811

4/19/081:31:26AM