In Java cosa devo usare per PriorityQueue che restituisce prima l'elemento più grande?

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

  •  06-07-2019
  •  | 
  •  

Domanda

Luoghi di PriorityQueue di Java il minimo elemento in testa alla lista, tuttavia ne ho bisogno per posizionare il massimo in testa. Qual è il modo migliore per ottenere una coda prioritaria che si comporti in questo modo.

Dato che ho scritto la classe memorizzata in questa coda, ho semplicemente potuto invertire i risultati di compareTo, non è usata al di fuori di questa coda.

Comunque mi piace rendere il codice una rappresentazione accurata di ciò che sto modellando, quello che sto cercando di fare è ottenere il massimo prima, quindi il codice dovrebbe dirlo piuttosto che il meno prima con una definizione insolita del minimo.

[modifica] solo un veloce grazie a tutti, Comparator suona come quello di cui ho bisogno non appena mi insegno a scriverne uno.

È stato utile?

Soluzione

Passa un Comparator che inverte l'ordine naturale quando si crea un'istanza di PriorityQueue .

Sarebbe simile a questo:

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

Altri suggerimenti

Fondamentalmente hai la soluzione giusta nella tua domanda: puoi passare un Comparatore al costruttore di a PriorityQueue . Il comparatore influenzerà il modo in cui gli articoli verranno ordinati.

Userei solo un comparatore. In questo modo, l'ordinamento viene utilizzato solo nella tua coda, anziché in allegato alla tua classe.

Fornisci semplicemente PriorityQueue una Personalizzazione Comparator<? super E> tramite il costruttore e modifica l'ordine degli elementi.

Dal javadocs:

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

Per aggiungere ai commenti del comparatore, controlla:

Collections.reverseOrder();

La documentazione di api su PriorityQueue dice: " Il capo di questa coda è il minimo elemento rispetto all'ordine specificato " ;. Quindi la definizione del minimo è soggettiva in base al tuo ordinamento specifico, motivo per cui hai la possibilità di fornire un comparatore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top