Elemento máximo y mínimo de un conjunto con Objetos

08/Jul/2007 Java , , , 3 Comentarios

En el ejemplo de Calculo del número máximo y mínimo de un conjunto veíamos que el algoritmo de cálculo implementado por el FrameWork de las colecciones confiaba en que el tipo de dato utilizado en el conjunto tenía implementado la función compareTo. Lo cual sucede en los tipos de datos básicos.

Esto no implica que aquellos tipos de datos que no lo implementen dicho método no puedan utilizar las funciones del FrameWork.

Además de las funciones...

  1. .max(conjunto)
  2. .min(conjunto)

Tenemos otras dos...

  1. .max(conjunto, comparator)
  2. .min(conjunto, comparator)

Estas operaciones sirven para decirle al algoritmo: dame el máximo y mínimo elemento del conjunto y utiliza el objeto comparator que es el que sabe comparar los elementos del conjunto.

La verdad es que hablar del objeto comparator es algo erroneo, ya que Comparator es un Interface. Dicho interface nos especifica los métodos que hay que implementar para que dos elementos puedan ordenarse.

Dos son los métodos del Interface Comparator...

  1. int compare(Object o1, Object o2)
  2. boolean equals(Object obj)

Deberemos de implementar estos métodos en una clase, la cual, será la que pasemos como parámetro a las funciones de máximo y de mínimo.

Para nuestro ejemplo supongamos que partimos de la clase Persona que será de la siguiente forma....

  1. Class Persona {
  2. int iEdad;
  3. String sNombre;
  4. }

El objeto compare deberá saber como comparar dos personas. El método devolverá un número positivo si la primera persona es menor que la segunda, cero si las personas son iguales y un número negativo si la segunda persona es mayor que la primera.

Asumimos que comparamos a las personas por su edad, quedándonos la siguiente implementación del método compare...

  1. Comparator<Persona> comparador = new Comparator<Persona>(){
  2. public int compare(Persona p1, Persona p2) {
  3. return (p1.getEdad()-p2.getEdad());
  4. }
  5. };

Por último bastará con pasarle el comparador a las funciones de mínimo y máximo.

  1. System.out.println(Collections.max(hs2,comparador).getNombre());
  2. System.out.println(Collections.min(hs2,comparador).getNombre());

Vídeos sobre Java


3 comentarios en “Elemento máximo y mínimo de un conjunto con Objetos”

Víctor Cuervo

Ignacio M C

“El objeto compare deberá saber como comparar dos personas. El método devolverá un número positivo si la primera persona es menor que la segunda, cero si las personas son iguales y un número negativo si la segunda persona es mayor que la primera.”

– numero positivo, si el pimero es menor que el segundo.
– cero, si son iguales
– numero negativo, si el segundo es mayor que el primero

???

– numero positivo, si el primero es mayor que el segundo .. (deberia ser asi no ? )

saludos.

Víctor Cuervo

lineadecodigo

@gaudy,

Muchas gracias por ver la errata. Ya está corregido.

Víctor Cuervo

gaudy

tiernes puesto en los dos prints max uno tiene q ponerlo min ^^ sino te da dos veces el ams viejo ^^ por lo demas bien

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*