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