산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java PriorityQueue 완벽 가이드: 기초, 연산, 커스텀 정렬

Java PriorityQueue

Java 컬렉션 프레임워크의 PriorityQueue 클래스를 명확한 예제와 모범 사례를 통해 살펴봅니다.

PriorityQueue 클래스는 힙 자료구조를 구현하며 Queue 인터페이스를 만족하여, 삽입 순서가 아닌 우선순위에 기반한 효율적인 요소 검색을 제공합니다.


PriorityQueue 생성하기

java.util.PriorityQueue를 임포트하여 시작하세요:

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

이 기본 설정은 자연 순서(오름차순)를 사용합니다. 생성 시 Comparator를 제공하여 순서를 커스터마이징할 수 있습니다.


PriorityQueue 주요 메서드

Queue 인터페이스에 정의된 모든 메서드를 사용할 수 있으며, 몇 가지 큐 전용 연산이 추가됩니다.


요소 삽입하기

예제:

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("Updated PriorityQueue: " + numbers);
    }
}

출력

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

4가 2보다 먼저 추가되었지만 헤드는 2로 유지됩니다. 가장 작은 요소이기 때문입니다. 1을 추가하면 큐가 재정렬되어 1이 헤드가 됩니다.


요소 접근하기

peek()로 헤드를 제거하지 않고 조회하세요:

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("Accessed Element: " + number);
    }
}

출력

PriorityQueue: [1, 4, 2] Accessed Element: 1

요소 제거하기

예제:

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 the element 2 removed? " + result);
        int number = numbers.poll();
        System.out.println("Removed Element Using poll(): " + number);
    }
}

출력

PriorityQueue: [1, 4, 2] Is the element 2 removed? true Removed Element Using poll(): 1

PriorityQueue 순회하기

iterator()로 순회합니다(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 using iterator(): ");
        Iterator<Integer> iterate = numbers.iterator();
        while (iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

출력

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

추가 메서드

메서드설명
contains(element)요소가 큐에 존재하면 true 반환
size()큐의 요소 수 반환
toArray()큐를 배열로 변환

Comparator로 커스텀 정렬하기

자연 순서를 뒤집거나 임의의 커스텀 우선순위를 구현하려면 큐 생성 시 Comparator를 제공하세요:

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); // 역순
    }
}

출력

PriorityQueue: [4, 3, 1, 2]

커스텀 비교자로 헤드가 가장 큰 요소가 됩니다. 자세한 내용은 Java Comparator API를 참조하세요.

java

  1. Java 연산자 마스터하기: 종류, 문법, 실전 예제
  2. Java 주석: 종류, 사용법, 모범 사례
  3. Java 향상된 for 루프(for-each) 완벽 가이드: 문법, 예제, 비교
  4. Java String 마스터하기: 생성, 메서드, 모범 사례
  5. Java 인터페이스 마스터: 개념, 구현, 모범 사례
  6. Java 익명 내부 클래스 마스터: 정의, 문법, 실전 예제
  7. Java Try-with-Resources 마스터: 자동 리소스 관리 완전 해설
  8. Java 애너테이션 완전 해설: 종류, 배치 위치, 실전 예제
  9. Java Assertion(어설션) 실전 가이드: 버그 조기 발견과 코드 신뢰성 확보
  10. Java Vector 완벽 가이드: 사용법, 특징, ArrayList와의 비교