Autor Tema: Java Ordenar un array de objetos con compareTo cómo se usar para comparar  (Leído 4499 veces)

fadrian

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Colegas no entindo a la hora de sobreescribir el metodo compareTo, pues  quiero ordenar un Array de objetos. Lo que no entiendo es que valor toma el objeto  de referencia que le pasamos por parametro (Object obj) para poder compararlo ¿cómo funciona esa comparacion? O sea "obj" toma el primer valor del Array o algo asi? . La verdad que siempre he visto que para recorrer un array se usa un ciclo , pero aqui por ejemplo cuando se dice :"this.sueldo<personaTemp.sueldo" que es exactamente lo que se esta comparando no sé si me explico. :) Disculpen mi ignorancia...

Código: [Seleccionar]
@Override
    public int compareTo(Object obj){
   
    Persona personaTemp=(Persona) obj;
   
    if(this.sueldo<personaTemp.sueldo)

return -1;

else if(this.sueldo>personaTemp.sueldo)

return 1;

return 0;
    }
   
    public static void main(String[] args) {
     
        Persona[] Array = new Persona [3];
        Array[0] = new Persona(203,"Zulema");
        Array[1] = new Persona(100,"Rafael");
        Array[2] = new Persona(200,"Adrian");
       
        Arrays.sort(Array);
« Última modificación: 24 de Febrero 2019, 18:01 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Ayuda comparteTo en JAVA
« Respuesta #1 en: 16 de Septiembre 2018, 01:59 »
El compareTo() es para "enseñarle a una clase como se han de comparar los objetos creados a partir de ella.
En este caso, le estamos "enseñando" que a los objetos Persona se han de comparar según su atributo sueldo.

Quizás no lo estás viendo claro porque estas comparaciones en tu código las está haciendo el metodo Arrays.sort() de manera interna.
sort() se encarga de ordenar los objetos que contiene el array.
Si los objetos fueran numeros enteros, no tendrá problemas para ordenarlos porque ordenar numeros es muy facil y esto ya sabe hacerlo. Es evidente si un numero es mayor o menor que otro.

Pero si se trata de objetos creados a partir de una clase diseñada por el programador, sort() no va a tener ni puñetera idea de como ordenarlo. ¿Como va a saber el si una Persona es mayor o menor que otra?
Entonces, Arrays.sort() lo que hace es buscar en la clase Persona el metodo compareTo() (metodo que todas las clases heredan de la clase Object, que es padre de TODAS las clases) con la esperanza de que ahí, le hayamos explicado en que atributo debe fijarse para decidir el orden de las Personas.

Podríamos decirle que las ordene segun la edad, según la estatura, según el peso....en este caso le decimos que las ordende según el sueldo. Y en compareTo() explicamos como ha de hacerse esta comparación.

Prueba a añadir el siguiente código en el main() para tener un ejemplo más visual de como funciona el compareTo().
Vamos a comparar a Zulema(Array[0]) con Rafael(Array[1])

Código: [Seleccionar]
if (Array[0].compareTo(Array[1]) == 1)
    System.out.println("Zulema cobra MAS que Rafael");
else if (Array[0].compareTo(Array[1]) == -1)
    System.out.println("Zulema cobra MENOS que Rafael");
else if (Array[0].compareTo(Array[1]) == 0)
    System.out.println("Zulema y Rafael cobran lo mismo");

Prueba a modificar los sueldos de estas dos Personas y ejecuta varias veces el código, para que veas como cambia el mensaje según sus sueldos.

Si no he sabido explicarme bien, insiste de nuevo y buscamos otra forma de explicarlo.
Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".