En Java, ¿qué debo usar para un PriorityQueue que devuelve el elemento más grande primero?

StackOverflow https://stackoverflow.com/questions/627130

  •  06-07-2019
  •  | 
  •  

Pregunta

Java PriorityQueue lugares el elemento más bajo al principio de la lista, sin embargo, lo necesito para colocar el elemento más importante al frente. ¿Cuál es la mejor manera de obtener una cola prioritaria que se comporte así?

Como escribí la clase almacenada en esta cola, podría simplemente revertir los resultados de compareTo, no se usa fuera de esta cola.

Sin embargo, me gusta hacer que el código sea una representación precisa de lo que estoy modelando, lo que intento hacer es obtener el mejor primero, por lo que el código debería decir eso en lugar de menos primero con una definición inusual de menos.

[edit] solo un rápido agradecimiento a todos, Comparator suena como lo que necesito apenas me enseño a escribir uno.

¿Fue útil?

Solución

Pase un Comparator que invierte el orden natural cuando crea una instancia de PriorityQueue .

Se vería así:

public class ReverseYourObjComparator implements Comparator<YourObj> {
    public int compare(final YourObj arg0, final YourObj arg1) {
        return 0 - arg0.compareTo(arg1);
    }
}

Otros consejos

Básicamente tiene la solución correcta en su pregunta: puede pasar un Comparador con el constructor de un PriorityQueue . El Comparador influirá en la forma en que se ordenarán los artículos.

Solo usaría un Comparador. De esta manera, el orden de clasificación se usa solo en su Cola, en lugar de adjuntarse a su clase.

Simplemente proporcione el PriorityQueue a Custom Comparator<? super E> a través del constructor y cambie el orden de los elementos.

De los javadocs:

PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 

Para agregar a los comentarios del Comparador, consulte:

Collections.reverseOrder();

La documentación de la API en PriorityQueue dice: " El encabezado de esta cola es el elemento mínimo con respecto al orden especificado " ;. Entonces, la definición de mínimo es subjetiva en función de su pedido específico, por lo que tiene la opción de proporcionar un comparador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top