¿Qué es este objeto en Comparable of Java [cerrado]
Frecuentes
Visto 120 veces
-1
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.
1 Respuestas
2
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 java comparable or haz tu propia pregunta.
¿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? - Joachim SauerNo entiendo lo que estás preguntando. ¿Lógica detrás del atributo empID de tu clase? - Florin Ghita
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. - Perception
sí, es el algoritmo MergeSort - Abhishek Choudhary