¿Qué es este objeto en Comparable of Java [cerrado]

Para el ordenamiento natural, estaba usando comparable y encontré tan pronto como uso el método

  public int compareTo(T o1) {      
        System.err.println("this "+this.empID+" that "+((Employee<T>)o1).empID);
        return this.empID - ((Employee<T>)o1).empID;
    }

Funciona bien, pero this.empID viene con algo de lógica y no puedo descifrarlo. Entonces, ¿cuál es la lógica detrás de los valores this.empID y qué es la iteración? ¿Es como llamar al método de clasificación? Internamente, el algoritmo se ocupa de esa parte (algoritmo de clasificación)

Por ejemplo :

al intentar imprimir this.empID y que la salida es

this 1 that 5
this 6 that 1
this 6 that 5
this 3 that 5
this 3 that 1
this 7 that 5
this 7 that 6
this 4 that 5
this 4 that 3
this 8 that 5
this 8 that 7
this 2 that 5
this 2 that 3
this 2 that 1

De donde el valor de este viene, o cuál es la lógica de iteración, es debido al algoritmo de clasificación.

preguntado el 22 de mayo de 12 a las 11:05

¿Qué quieres decir con "viene con algo de lógica"? empID parece un campo simple. Los campos no tienen lógica, solo tienen valores. ¿Estás buscando la lógica que conjuntos ¿Ese campo? -

No entiendo lo que estás preguntando. ¿Lógica detrás del atributo empID de tu clase? -

Está preguntando por qué se invocan los objetos en el orden que muestra su impresión. supongo que el suyo reales La pregunta es cuál es el algoritmo para ordenar una lista de sus objetos. -

sí, es el algoritmo MergeSort -

1 Respuestas

Si su pregunta es sobre qué código está llamando a su compareTo método, tiene razón en que generalmente se llamará como parte de un algoritmo de clasificación. Por ejemplo, si inserta un Employee a en un TreeSet que contiene Employee b(digamos), es posible que vea llamadas como a.compareTo(b) or b.compareTo(a), dependiendo del algoritmo de clasificación exacto. En el primer caso, this is a, y en el segundo caso this is b y that is a.

Para ver qué código está llamando compareTo(), puede establecer un punto de interrupción en ese método y usar un depurador. Alternativamente, una técnica rápida y cruda para ver los rastros de pila de las llamadas es agregar lo siguiente a compareTo()

Exception e = new Exception(); // This prepares a call stack
e.printStackTrace(); // This prints it

Obviamente, este tipo de salida de depuración es muy costosa en términos de rendimiento, así como detallada, por lo que no debe dejarse en el código de producción.

contestado el 22 de mayo de 12 a las 12:05

Gracias por el aporte, esto es exactamente lo que estaba buscando: Abhishek Choudhary

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.