Em Java que eu deveria usar para uma PriorityQueue que retorna o maior elemento em primeiro lugar?

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

  •  06-07-2019
  •  | 
  •  

Pergunta

O Java PriorityQueue lugares o mínimo elemento no topo da lista, no entanto eu preciso dele para colocar o maior elemento na cabeça. O que é a maneira mais legal para obter uma fila de prioridade que se comporta assim.

Desde que eu escrevi a classe armazenados nessa fila eu poderia simplesmente inverter os resultados de compareTo, não é utilizado fora desta fila.

No entanto, eu gostaria de fazer o código de uma representação exata do que estou a modelagem, o que estou tentando fazer é obter o maior primeiro para que o código deve dizer que, em vez de menos em primeiro lugar com uma definição incomum de menos.

[editar] apenas agradecer rápida a todos, sons comparadores como o que eu preciso, tão logo eu me ensinar a escrever um.

Foi útil?

Solução

Comparator que inverte a ordem natural quando você instanciar o PriorityQueue .

Seria algo parecido com isto:

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

Outras dicas

Você tem basicamente a solução direita na sua pergunta: você pode passar um Comparador para o construtor de um PriorityQueue . O Comparador vai influenciar a forma como os itens serão ordenados.

Eu tinha acabado de usar um comparador. Desta forma, a ordem de classificação é usado apenas na sua fila, em vez de ligado à sua classe.

Basta fornecer a PriorityQueue um Comparator<? super E> personalizado através do construtor e alterar a ordem dos elementos.

A partir dos javadocs:

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

Para acrescentar aos comentários comparadores, confira:

Collections.reverseOrder();

A documentação da API em PriorityQueue diz: "A cabeça desta fila é o mínimo elemento com relação à ordenação especificado". Assim, a definição de menos é subjetiva com base na sua ordenação específica é por isso que você tem a opção de fornecer um comparador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top