¿Cuál es el mejor método para ordenar un Hashtable que tiene una clase como valor con múltiples variables (enteros) en Java?
Tengo un sistema para verificar y ordenar por valor en un Hashtable, que se utiliza para obtener las mejores Cadenas de caracteres en ese Hashtable. Quiero establecer otro valor en ese Hashtable, así que estoy utilizando una clase interna, de esta manera:
Map<string, values=""> hash = new Hashtable<string,values>();
La clase:
public class Values {
public Integer a;
public Integer b;
public Values(Integer a, Integer b) {
this.a = a;
this.b = b;
}
}
Mi objetivo es ordenar todos los valores en el Hashtable (Integer a y b) y devolver la Cadena de caracteres del Hashtable que muestra quién tiene los valores más altos (como un sistema de base de datos). ¿Es posible hacer eso? La razón por la que quiero hacer eso es para obtener a los mejores “killers” en un juego ordenando por Integer a y establecer la hora en la que se realizó el último “kill” en Integer b. Así, si el jugador ha matado antes que el otro y tiene la misma cantidad de “kills”, muestra primero al que tiene el Integer b más alto, que sería el que tiene el tiempo más alto (en milisegundos) en la variable b.
¿Cuál sería el mejor método para hacer algo así?</string,values></string,>
davy.ai
Para lograr este objetivo, puedes utilizar la clase TreeMap en Java, que implementa la interfaz SortedMap y te permite ordenar las entradas en el mapa por clave o por valor. Para ordenar un Hashtable por valor utilizando la clase TreeMap, necesitas crear un objeto Comparator que compare los valores en el mapa y luego utilizar el constructor de TreeMap que toma un Comparator como parámetro para crear un mapa ordenado basado en los valores. Aquí tienes un ejemplo de código que demuestra cómo hacerlo:
En este ejemplo, el Comparator compara los valores del Hashtable (objetos
Valores
) basándose en los camposa
yb
, y los ordena en orden descendente dea
. Si dos jugadores tienen la misma cantidad de asesinatos (a
), los ordena basándose en el campob
en orden ascendente (primer asesinato más antiguo). ElmapaOrdenado
se crea utilizando el constructor de TreeMap que toma el Comparator y las entradas se agregan desde el mapa originalhash
utilizando el métodoputAll
. Por último, los jugadores se imprimen en orden ordenado utilizando un bucle for-each sobreentrySet()
delmapaOrdenado
.Este código se puede adaptar a tu caso de uso donde tienes un Hashtable con los datos de los jugadores y deseas ordenarlos en función de los asesinatos y el tiempo del último asesinato. Solo necesitas reemplazar los datos de ejemplo con tus propios datos y ajustar el Comparator para comparar los campos correctos en los objetos
Valores
.</string,></string,></string,>