Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

Antrian Prioritas Java

Java PriorityQueue

Dalam tutorial ini, kita akan belajar tentang kelas PriorityQueue dari framework koleksi Java dengan bantuan contoh.

PriorityQueue class menyediakan fungsionalitas struktur data heap.

Ini mengimplementasikan antarmuka Antrian.

Tidak seperti antrian normal, elemen antrian prioritas diambil dalam urutan yang diurutkan.

Misalkan, kita ingin mengambil elemen dalam urutan menaik. Dalam hal ini, kepala antrian prioritas akan menjadi elemen terkecil. Setelah elemen ini diambil, elemen terkecil berikutnya akan menjadi kepala antrian.

Penting untuk dicatat bahwa elemen antrian prioritas mungkin tidak diurutkan. Namun, elemen selalu diambil dalam urutan terurut.


Membuat Antrian Prioritas

Untuk membuat antrian prioritas, kita harus mengimpor java.util.PriorityQueue kemasan. Setelah kita mengimpor paket, berikut adalah cara membuat antrian prioritas di Java.

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

Di sini, kami telah membuat antrian prioritas tanpa argumen apa pun. Dalam hal ini, kepala antrian prioritas adalah elemen terkecil dari antrian. Dan elemen dihapus dalam urutan menaik dari antrian.

Namun, kita dapat menyesuaikan urutan elemen dengan bantuan Comparator antarmuka. Kita akan mempelajarinya nanti dalam tutorial ini.


Metode Antrian Prioritas

PriorityQueue class menyediakan implementasi semua metode yang ada di Queue antarmuka.


Sisipkan Elemen ke Antrian Prioritas

Misalnya,

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);
    }
}

Keluaran

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

Di sini, kami telah membuat antrian prioritas bernama numbers . Kami telah memasukkan 4 dan 2 ke antrian.

Meskipun 4 disisipkan sebelum 2, kepala antrian adalah 2. Hal ini karena kepala antrian prioritas adalah elemen terkecil dari antrian.

Kami kemudian telah memasukkan 1 ke antrian. Antrian sekarang diatur ulang untuk menyimpan elemen terkecil 1 ke kepala antrian.


Mengakses Elemen Antrian Prioritas

Untuk mengakses elemen dari antrian prioritas, kita dapat menggunakan peek() metode. Metode ini mengembalikan kepala antrian. Misalnya,

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);
    }
}

Keluaran

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

Hapus Elemen Antrian Prioritas

Misalnya,

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);
    }
}

Keluaran

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

Mengulangi Antrian Prioritas

Untuk mengulangi elemen antrian prioritas, kita dapat menggunakan iterator() metode. Untuk menggunakan metode ini, kita harus mengimpor java.util.Iterator kemasan. Misalnya,

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(", ");
        }
    }
}

Keluaran

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

Metode Antrian Prioritas Lainnya

Metode Deskripsi
contains(element) Mencari antrian prioritas untuk elemen yang ditentukan. Jika elemen ditemukan, ia mengembalikan true , jika tidak mengembalikan false .
size() Mengembalikan panjang antrian prioritas.
toArray() Mengonversi antrean prioritas menjadi larik dan mengembalikannya.

Pembanding Antrian Prioritas

Dalam semua contoh di atas, elemen antrian prioritas diambil dalam urutan alami (urutan naik). Namun, kami dapat menyesuaikan pemesanan ini.

Untuk ini, kita perlu membuat kelas pembanding kita sendiri yang mengimplementasikan Comparator antarmuka. Misalnya,

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;
        }
    }
}

Keluaran

PriorityQueue: [4, 3, 1, 2]

Dalam contoh di atas, kami telah membuat antrian prioritas yang melewati CustomComparator kelas sebagai argumen.

CustomComparator kelas mengimplementasikan Comparator antarmuka.

Kami kemudian menimpa compare() metode. Metode sekarang menyebabkan kepala elemen menjadi angka terbesar.

Untuk mempelajari lebih lanjut tentang komparator, kunjungi Java Comparator.


java

  1. Operator Jawa
  2. Komentar Jawa
  3. Java untuk setiap Loop
  4. String Jawa
  5. Antarmuka Jawa
  6. Kelas Anonim Java
  7. Java mencoba-dengan-sumber daya
  8. Anotasi Jawa
  9. Pernyataan Jawa
  10. Vektor Jawa