Java의 PriorityQueue

Farkhanda Athar 2023년10월12일
  1. Java에서 PriorityQueue 선언
  2. PriorityQueue에 요소 추가
  3. PriorityQueue에서 요소 제거
  4. PriorityQueue 요소 액세스
  5. PriorityQueue 반복
Java의 PriorityQueue

PriorityQueue는 우선 순위에 따라 개체를 진행해야 할 때 사용됩니다. 또한 선입선출(First In First Out) 알고리즘을 기반으로 하지만 우선순위에 따라 요소를 진행해야 하는 경우가 있습니다. 이것이 PriorityQueue가 작동하는 이유입니다. PriorityQueue는 우선순위 힙을 기반으로 합니다. PriorityQueue의 요소는 자연스러운 순서에 따라 정렬되며 queue 생성 시 사용된 생성자에 따라 다릅니다.

Java에서 PriorityQueue 선언

public class PriorityQueue<E> extends AbstractQueue<E> implements Serializable

여기서 E는 이 대기열에 있는 요소의 유형입니다.

PriorityQueue 클래스에서 다양한 작업을 수행하는 방법에 대해 논의해 보겠습니다.

PriorityQueue에 요소 추가

PriorityQueue에 항목을 포함하려면 add() 메서드 또는 addition() 메서드를 사용할 수 있습니다. 삽입 순서는 PriorityQueue 내에 저장되지 않습니다. 이러한 요소는 기본적으로 오름차순인 우선 순위에 따라 저장됩니다.

예시:

import java.io.*;
import java.util.*;

public class PriorityQueueDemo {
  public static void main(String args[]) {
    PriorityQueue<String> pq = new PriorityQueue<>();

    pq.add("Welcome");
    pq.add("To");
    pq.add("Party");
    System.out.println(pq);
  }
}

출력:

[To, Welcome, Party]

PriorityQueue에서 요소 제거

PriorityQueue에서 요소를 제거하려면 delete() 메서드를 사용할 수 있습니다. 이러한 개체가 여러 개 있는 경우 개체의 첫 번째 인스턴스가 제거됩니다. 또한 poll() 메서드를 사용하여 헤드를 가져온 다음 교체할 수도 있습니다.

import java.io.*;
import java.util.*;
public class PriorityQueueDemo {
  public static void main(String args[]) {
    PriorityQueue<String> pq = new PriorityQueue<>();
    pq.add("Welcome");
    pq.add("To");
    pq.add("Party");

    System.out.println("Initial PriorityQueue " + pq);
    pq.remove("Geeks");
    System.out.println("After Remove - " + pq);
    System.out.println("Poll Method - " + pq.poll());
    System.out.println("Final PriorityQueue - " + pq);
  }
}

출력:

Initial PriorityQueue [To, Welcome, Party]
After Remove - [To, Welcome]
Poll Method - To
Final PriorityQueue - [Party]

PriorityQueue 요소 액세스

Queue는 First In First Out 원칙을 기반으로 하기 때문에 Queue의 헤드에만 액세스할 수 있습니다. 우선 순위인 Queue 요소에 액세스하려면 peek() 메서드를 사용할 수 있습니다.

예시:

// Java program to access elements
// from a PriorityQueue
import java.util.*;

class PriorityQueueDemo {
  // Main Method
  public static void main(String[] args) {
    // Creating a priority queue
    PriorityQueue<String> pq = new PriorityQueue<>();
    pq.add("Welcome");
    pq.add("To");
    pq.add("Party");
    System.out.println("PriorityQueue: " + pq);

    // Using the peek() method
    String element = pq.peek();
    System.out.println("Accessed Element: " + element);
  }
}

출력:

PriorityQueue: [To, Welcome, Party]
Accessed Element: To

PriorityQueue 반복

PriorityQueue를 반복하는 방법에는 여러 가지가 있습니다. 가장 잘 알려진 방법은 queue를 배열로 변환한 다음 for 루프를 사용하여 순회하는 것입니다. 또한 queue에는 queue를 순환하는 데 사용할 수 있는 내부 반복자가 있습니다.

예시:

import java.util.*;
public class PriorityQueueDemo {
  public static void main(String args[]) {
    PriorityQueue<String> pq = new PriorityQueue<>();

    pq.add("Welcome");
    pq.add("To");
    pq.add("Party");

    Iterator iterator = pq.iterator();

    while (iterator.hasNext()) {
      System.out.print(iterator.next() + " ");
    }
  }
}

출력:

To Welcome Party

관련 문장 - Java Queue