Prinsip pelaksanaan dan senario aplikasi Java Queue
1 Pengenalan
Dalam pembangunan perisian, baris gilir ialah struktur data biasa Ia memasukkan dan memasukkan elemen mengikut prinsip masuk dahulu (FIFO). operasi padam. Java menyediakan antara muka Queue, yang mentakrifkan operasi asas baris gilir, seperti memasuki baris gilir, nyah gilir, dan mendapatkan elemen pertama baris gilir.
Artikel ini akan memperkenalkan prinsip pelaksanaan Java Queue dan senario aplikasinya, dan memberikan contoh kod khusus.
2. Prinsip Pelaksanaan
Kelas pelaksanaan antara muka Java Queue biasanya berbentuk tatasusunan atau senarai terpaut. Dua prinsip pelaksanaan diperkenalkan di bawah:
Tatasusunan ialah struktur linear, dan elemen boleh diakses melalui subskrip. Untuk pelaksanaan antara muka Baris Gilir, anda boleh menggunakan kaedah tatasusunan bulat, iaitu, mentakrifkan dua penunjuk di kepala dan ekor tatasusunan untuk menunjuk ke kepala dan ekor baris gilir masing-masing. Semasa operasi beratur, elemen pertama dimasukkan ke dalam ekor dan penunjuk ekor digerakkan ke belakang Apabila operasi nyah gilir dilakukan, elemen kepala mula-mula dikeluarkan dan penunjuk kepala digerakkan ke belakang.
Pelaksanaan kaedah ini adalah mudah dan cekap, tetapi pengembangan tatasusunan perlu dipertimbangkan Apabila bilangan elemen dalam baris gilir melebihi panjang tatasusunan, tatasusunan yang lebih besar perlu dibuat dan unsur-unsur bagi. tatasusunan asal disalin ke tatasusunan baharu.
Senarai terpaut ialah struktur data yang terdiri daripada nod Setiap nod mengandungi elemen data dan penunjuk ke nod seterusnya. Untuk pelaksanaan antara muka Baris Gilir, anda boleh menggunakan senarai terpaut berganda, iaitu setiap nod dalam senarai terpaut mengandungi penunjuk ke nod sebelumnya dan nod seterusnya.
Apabila membuat baris gilir, anda perlu mencipta nod baharu dan memasukkannya pada penghujung senarai terpaut Apabila menyah gilir, anda perlu mencari nod kepala senarai terpaut dan memadamkannya.
Pelaksanaan senarai terpaut adalah lebih fleksibel daripada pelaksanaan tatasusunan Ia boleh menambah atau mengurangkan nod secara dinamik tanpa mengambil kira isu pengembangan tatasusunan. Walau bagaimanapun, senarai terpaut memerlukan ruang tambahan untuk menyimpan penunjuk dan menduduki ruang memori yang agak besar. Senario Aplikasi pemotongan lalu lintas dan senario lain. Pengeluar menghantar mesej ke baris gilir, dan pengguna mengambil mesej dari baris gilir dan memprosesnya. Ciri masuk dahulu keluar dahulu bagi baris gilir memastikan mesej diproses mengikut susunan ia dihantar.
Kod contoh:
import java.util.Queue; import java.util.LinkedList; public class MessageQueue { private Queue<String> queue; public MessageQueue() { this.queue = new LinkedList<>(); } public void enqueue(String message) { queue.add(message); } public String dequeue() { return queue.poll(); } public boolean isEmpty() { return queue.isEmpty(); } public int size() { return queue.size(); } public String peek() { return queue.peek(); } }
Kod sampel:
import java.util.Queue; import java.util.LinkedList; public class ThreadPool { private Queue<Runnable> queue; public ThreadPool() { this.queue = new LinkedList<>(); } public void addTask(Runnable task) { queue.add(task); } public void execute() { while (!queue.isEmpty()) { Runnable task = queue.poll(); new Thread(task).start(); } } }
Kod contoh:
import java.util.Queue; import java.util.LinkedList; public class BFS { public void bfs(Node start) { Queue<Node> queue = new LinkedList<>(); queue.add(start); while (!queue.isEmpty()) { Node node = queue.poll(); System.out.println(node.value); for (Node neighbor : node.neighbors) { if (!neighbor.visited) { neighbor.visited = true; queue.add(neighbor); } } } } }
IV Ringkasan
Atas ialah kandungan terperinci Penjelasan terperinci tentang prinsip kerja Java Queue dan senario yang berkenaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!