Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java PriorityQueue: Fundamenten, operaties en aangepaste sortering

Java PriorityQueue

Verken de PriorityQueue-klasse in Java's collections framework met duidelijke voorbeelden en best-practice richtlijnen.

De PriorityQueue-klasse implementeert de heap-datastructuur en voldoet aan de Queue-interface, wat efficiënte ophaling van elementen op basis van prioriteit in plaats van invoegvolgorde biedt.

Java PriorityQueue: Fundamenten, operaties en aangepaste sortering

In tegenstelling tot standaard wachtrijen worden elementen in gesorteerde volgorde geretourneerd. Als je oplopende volgorde nodig hebt, is de head van de wachtrij het kleinste element; elke volgende verwijdering levert de volgende kleinste waarde. Let op: de interne ordening is niet gegarandeerd – alleen de extractievolgorde is gesorteerd.


Een PriorityQueue aanmaken

Begin met importeren van java.util.PriorityQueue:

import java.util.PriorityQueue; PriorityQueue<Integer> numbers = new PriorityQueue<>();

Deze standaardconfiguratie gebruikt natuurlijke ordening (oplopend). Je kunt de volgorde aanpassen door een Comparator mee te geven bij het construeren van de wachtrij.


Belangrijkste methoden van PriorityQueue

Alle methoden gedefinieerd in de Queue-interface zijn beschikbaar, plus een paar queue-specifieke operaties.


Elementen invoegen

  • add() – Voegt een element toe; gooit een exception als de wachtrij vol is.
  • offer() – Voegt een element toe; retourneert false als de wachtrij vol is.

Voorbeeld:

import java.util.PriorityQueue; class Main { public static void main(String[] args) { PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); System.out.println("PriorityQueue: " + numbers); numbers.offer(1); System.out.println("Bijgewerkte PriorityQueue: " + numbers); } }

Output

PriorityQueue: [2, 4] Bijgewerkte PriorityQueue: [1, 4, 2]

Hoewel 4 voor 2 werd toegevoegd, blijft de head 2 omdat het het kleinste element is. Het toevoegen van 1 herschikt de wachtrij zodat 1 de head wordt.


Elementen benaderen

Gebruik peek() om de head te bekijken zonder te verwijderen:

import java.util.PriorityQueue; class Main { public static void main(String[] args) { PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); int number = numbers.peek(); System.out.println("Toegankelijk element: " + number); } }

Output

PriorityQueue: [1, 4, 2] Toegankelijk element: 1

Elementen verwijderen

  • remove() – Verwijdert een opgegeven element, retourneert true als succesvol.
  • poll() – Haalt en verwijdert de head van de wachtrij.

Voorbeeld:

import java.util.PriorityQueue; class Main { public static void main(String[] args) { PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); boolean result = numbers.remove(2); System.out.println("Is element 2 verwijderd? " + result); int number = numbers.poll(); System.out.println("Verwijderd element met poll(): " + number); } }

Output

PriorityQueue: [1, 4, 2] Is element 2 verwijderd? true Verwijderd element met poll(): 1

Itereren over een PriorityQueue

Itereer met iterator() (vereist java.util.Iterator):

import java.util.PriorityQueue; import java.util.Iterator; class Main { public static void main(String[] args) { PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.print("PriorityQueue met iterator(): "); Iterator<Integer> iterate = numbers.iterator(); while (iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }

Output

PriorityQueue met iterator(): 1, 4, 2,

Aanvullende methoden

MethodeBeschrijving
contains(element)Retourneert true als het element in de wachtrij zit.
size()Retourneert het aantal elementen in de wachtrij.
toArray()Converteert de wachtrij naar een array.

Aangepaste sortering met Comparator

Om de natuurlijke volgorde om te keren of een custom prioriteit te implementeren, geef een Comparator mee bij het aanmaken van de wachtrij:

import java.util.PriorityQueue; import java.util.Comparator; class Main { public static void main(String[] args) { PriorityQueue<Integer> numbers = new PriorityQueue<>(new CustomComparator()); numbers.add(4); numbers.add(2); numbers.add(1); numbers.add(3); System.out.print("PriorityQueue: " + numbers); } } class CustomComparator implements Comparator<Integer> { @Override public int compare(Integer a, Integer b) { return b.compareTo(a); // omgekeerde volgorde } }

Output

PriorityQueue: [4, 3, 1, 2]

De custom comparator zorgt ervoor dat de head het grootste element is. Voor diepere inzichten, raadpleeg de Java Comparator API.


Java

  1. Java-operators beheersen: typen, syntax en praktische voorbeelden
  2. Java-commentaar: typen, gebruik en best practices
  3. Java if…else beheersen: control flow uitgelegd
  4. Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
  5. Java Strings beheersen: aanmaken, methodes en best practices
  6. Java interfaces meesteren: concepten, implementatie en best practices
  7. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  8. Java Try-with-resources meesteren: automatische resource management uitgelegd
  9. Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
  10. Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
  11. Java Vector begrijpen: Gebruik, Kenmerken en Vergelijking met ArrayList