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

자바 우선순위 큐

자바 우선순위 큐

이 자습서에서는 예제를 통해 Java 컬렉션 프레임워크의 PriorityQueue 클래스에 대해 알아봅니다.

PriorityQueue 클래스는 힙 데이터 구조의 기능을 제공합니다.

큐 인터페이스를 구현합니다.

일반 큐와 달리 우선순위 큐 요소는 정렬된 순서로 검색됩니다.

요소를 오름차순으로 검색한다고 가정해 보겠습니다. 이 경우 우선순위 큐의 헤드가 가장 작은 요소가 됩니다. 이 요소가 검색되면 다음으로 작은 요소가 대기열의 선두가 됩니다.

우선순위 큐의 요소는 정렬되지 않을 수 있다는 점에 유의하는 것이 중요합니다. 그러나 요소는 항상 정렬된 순서로 검색됩니다.

<시간>

PriorityQueue 생성

우선 순위 대기열을 생성하려면 java.util.PriorityQueue를 가져와야 합니다. 패키지. 패키지를 가져온 후 Java에서 우선 순위 대기열을 만드는 방법은 다음과 같습니다.

PriorityQueue<Integer> numbers = new PriorityQueue<>();

여기에서 인수가 없는 우선 순위 대기열을 만들었습니다. 이 경우 우선순위 큐의 헤드는 큐의 가장 작은 요소입니다. 그리고 요소는 대기열에서 오름차순으로 제거됩니다.

그러나 Comparator의 도움으로 요소의 순서를 사용자 정의할 수 있습니다. 상호 작용. 이 튜토리얼의 뒷부분에서 이에 대해 알아볼 것입니다.

<시간>

PriorityQueue의 메소드

PriorityQueue 클래스는 Queue에 있는 모든 메소드의 구현을 제공합니다. 인터페이스.

<시간>

PriorityQueue에 요소 삽입

예를 들어,

import java.util.PriorityQueue;

class Main {
    public static void main(String[] args) {

        // Creating a priority queue
        PriorityQueue<Integer> numbers = new PriorityQueue<>();

        // Using the add() method
        numbers.add(4);
        numbers.add(2);
        System.out.println("PriorityQueue: " + numbers);

        // Using the offer() method
        numbers.offer(1);
        System.out.println("Updated PriorityQueue: " + numbers);
    }
}

출력

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

여기에서 numbers라는 우선 순위 대기열을 만들었습니다. . 대기열에 4와 2를 삽입했습니다.

2 앞에 4가 삽입되어 있지만, queue의 head는 2입니다. 이는 priority queue의 head가 queue의 가장 작은 요소이기 때문입니다.

그런 다음 대기열에 1을 삽입했습니다. 대기열은 이제 가장 작은 요소 1을 대기열의 헤드에 저장하도록 재정렬됩니다.

<시간>

PriorityQueue 요소에 액세스

우선 순위 대기열의 요소에 액세스하려면 peek()을 사용할 수 있습니다. 방법. 이 메서드는 큐의 헤드를 반환합니다. 예를 들어,

import java.util.PriorityQueue;

class Main {
    public static void main(String[] args) {

        // Creating a priority queue
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        System.out.println("PriorityQueue: " + numbers);

        // Using the peek() method
        int number = numbers.peek();
        System.out.println("Accessed Element: " + number);
    }
}

출력

PriorityQueue: [1, 4, 2]
Accessed Element: 1
<시간>

PriorityQueue 요소 제거

예를 들어,

import java.util.PriorityQueue;

class Main {
    public static void main(String[] args) {

        // Creating a priority queue
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        System.out.println("PriorityQueue: " + numbers);

        // Using the remove() method
        boolean result = numbers.remove(2);
        System.out.println("Is the element 2 removed? " + result);

        // Using the poll() method
        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) {

        // Creating a priority queue
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        System.out.print("PriorityQueue using iterator(): ");

        //Using the iterator() method
        Iterator<Integer> iterate = numbers.iterator();
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

출력

PriorityQueue using iterator(): 1, 4, 2,
<시간>

기타 PriorityQueue 메소드

메소드 설명
contains(element) 지정된 요소에 대한 우선 순위 큐를 검색합니다. 요소가 발견되면 true을 반환합니다. , 그렇지 않으면 false을 반환합니다. .
size() 우선순위 큐의 길이를 반환합니다.
toArray() 우선순위 큐를 배열로 변환하고 반환합니다.
<시간>

우선순위 큐 비교기

위의 모든 예에서 우선 순위 큐 요소는 자연 순서(오름차순)로 검색됩니다. 그러나 이 순서를 사용자 정의할 수 있습니다.

이를 위해 Comparator을 구현하는 자체 비교기 클래스를 만들어야 합니다. 상호 작용. 예를 들어,

import java.util.PriorityQueue;
import java.util.Comparator;
class Main {
    public static void main(String[] args) {

        // Creating a priority queue
        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 number1, Integer number2) {
        int value =  number1.compareTo(number2);
        // elements are sorted in reverse order
        if (value > 0) {
            return -1;
        }
        else if (value < 0) {
            return 1;
        }
        else {
            return 0;
        }
    }
}

출력

PriorityQueue: [4, 3, 1, 2]

위의 예에서는 CustomComparator를 전달하는 우선 순위 대기열을 만들었습니다. 클래스를 인수로 사용합니다.

CustomComparator 클래스는 Comparator을 구현합니다. 인터페이스.

그런 다음 compare()를 재정의합니다. 방법. 이 메서드는 이제 요소의 머리 부분이 가장 큰 숫자가 되도록 합니다.

비교기에 대해 자세히 알아보려면 Java Comparator를 방문하세요.


java

  1. 자바 연산자
  2. 자바 주석
  3. 자바 for-each 루프
  4. 자바 문자열
  5. 자바 인터페이스
  6. 자바 익명 클래스
  7. 자바 리소스 사용
  8. 자바 주석
  9. 자바 어설션
  10. 자바 벡터