Bagaimana cara membuat objek Antrian di java?

Jawaban:

151

A Queueadalah antarmuka, yang berarti Anda tidak dapat membuat secara Queuelangsung.

Pilihan terbaik adalah untuk membangun off kelas yang sudah mengimplementasikan Queueinterface, seperti salah satu dari berikut ini: AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedList, PriorityBlockingQueue, PriorityQueue, atau SynchronousQueue.

Alternatifnya adalah menulis kelas Anda sendiri yang mengimplementasikan antarmuka antrian yang diperlukan. Ini tidak diperlukan kecuali dalam kasus-kasus langka di mana Anda ingin melakukan sesuatu yang istimewa sambil memberikan sisa program Anda dengan Queue.

public class MyQueue<T extends Tree> implements Queue<T> {
   public T element() {
     ... your code to return an element goes here ...
   }

   public boolean offer(T element) {
     ... your code to accept a submission offer goes here ...
   }

   ... etc ...
}

Alternatif yang bahkan lebih jarang digunakan adalah membangun kelas anonim yang mengimplementasikan Queue. Anda mungkin tidak ingin melakukan ini, tetapi terdaftar sebagai opsi demi mencakup semua pangkalan.

new Queue<Tree>() {
   public Tree element() {
     ...
   };

   public boolean offer(Tree element) {
     ...
   };
   ...
};
Edwin Buck
sumber
21
Oh sayang ... Saya khawatir seseorang yang membaca ini akan menggunakan anonim Queue... tapi +1 tetap.
Tom
1
Sebenarnya, Jon lebih jelas. Saya akan memberi ini +1 jika Anda memperbaruinya untuk menyebutkan konkurensi dan menyingkirkan kode untuk kelas anonim ... Saya pikir itu membuat jawaban lebih membingungkan bagi seseorang yang ingin tahu apa yang harus dilakukan karena mereka hampir pasti tidak ingin lakukan itu. (Bahkan jika mereka menginginkan kelas mereka sendiri, tidak perlu membuatnya anonim)
Tom
1
@ Tom tidak mengeluarkan info kelas anonim karena itu baik untuk mengetahui itu mungkin, tapi saya memasukkan "Tulis implementasi Anda sendiri" sebelum yang menjauhkan lebih jauh dari alternatif yang terdaftar (lebih umum) pertama.
Edwin Buck
1
Mengapa tidak menyebutkanArrayDeque
JW.ZG
Saya tidak dapat menemukan metode enqueue () di salah satu kelas yang Anda sebutkan, saya hanya dapat menemukan metode add (), tolong perbaiki saya jika saya salah.
Sreekanth Karumanaghat
152

Queueadalah sebuah antarmuka. Anda tidak dapat membuat instance antarmuka secara langsung kecuali melalui kelas dalam anonim. Biasanya ini bukan yang ingin Anda lakukan untuk koleksi. Sebaliknya, pilih implementasi yang sudah ada. Sebagai contoh:

Queue<Integer> q = new LinkedList<Integer>();

atau

Queue<Integer> q = new ArrayDeque<Integer>();

Biasanya Anda memilih implementasi pengumpulan berdasarkan karakteristik kinerja dan konkurensi yang Anda minati.

Jon Skeet
sumber
9
Dari ArrayDeque : "Kelas ini cenderung lebih cepat dari Stack ketika digunakan sebagai stack, dan lebih cepat dari LinkedList ketika digunakan sebagai antrian". Ini karena lokalitas data yang ramah-cache-CPU dan alokasi yang lebih jarang.
Vadzim
42
Queue<String> qe=new LinkedList<String>();

qe.add("b");
qe.add("a");
qe.add("c");

Karena Queueantarmuka, Anda tidak dapat membuat instance seperti yang Anda ilustrasikan

Jigar Joshi
sumber
1
java.util.Queueadalah sebuah antarmuka. Anda tidak dapat membuat instance antarmuka. Anda perlu membuat instance kelas yang mengimplementasikan antarmuka itu. Dalam hal ini LinkedList adalah kelas semacam itu.
Mihai Toader
@Tod ya sedang dalam perjalanan .. :)
Jigar Joshi
Terima kasih @JigarJoshi !! apakah ada cara untuk melakukan hal yang sama dengan stack? Saya tidak dapat menemukan apa pun.
Zehra Subaş
@ZehStack<String> stack = new Stack<>(); stack.push("a"); stack.push("b"); System.out.println(stack.pop()); import java.util.Stack;
Jigar Joshi
15

Antrian adalah antarmuka; Anda tidak dapat membuat Antrian secara eksplisit. Anda harus meng-instantiate salah satu kelas implementasinya. Sesuatu seperti:

Queue linkedList = new LinkedList();

Berikut ini tautan ke tutorial Java tentang hal ini.

zmf
sumber
ini tidak berfungsi lagi ..! Meskipun deklarasi ini berfungsi -> Antrian <Character> antrian = new ArrayDeque <Character> ();
Md Faisal
@MdFaisal Bekerja dengan baik untuk saya w / versi java "1.7.0_71"
zmf
12

masukkan deskripsi gambar di sini

Antarmuka antrian meluas java.util.Collection dengan operasi penyisipan, ekstraksi, dan inspeksi tambahan seperti:

+offer(element: E):boolean // Memasukkan elemen

+poll(): E // Ambil elemen dan mengembalikan NULL jika antrian kosong

+remove(): E// Mengambil dan menghapus elemen dan melemparkan Pengecualian jika antrian kosong

+peek(): E// Ambil, tetapi tidak menghapus, kepala antrian ini, mengembalikan nol jika antrian ini kosong.

+element(): E// Ambil, tetapi tidak menghapus, kepala antrian ini, melempar pengecualian jika antrian kosong.

Contoh Kode untuk mengimplementasikan Antrian:

java.util.Queue<String> queue = new LinkedList<>();
queue.offer("Hello");
queue.offer("StackOverFlow");
queue.offer("User");

System.out.println(queue.peek());

while (queue.size() > 0){
    System.out.println(queue.remove() + " ");
}
//Since Queue is empty now so this will return NULL
System.out.println(queue.peek());

Keluaran kode:

Hello
Hello 
StackOverFlow 
User 
null
devDeejay
sumber
7

Antrian adalah antarmuka di java, Anda tidak bisa melakukan itu.

Sebaliknya, Anda memiliki dua opsi:

Pilihan 1:

Queue<Integer> Q = new LinkedList<>();

pilihan 2:

Queue<Integer> Q = new ArrayDeque<>();

Saya sarankan menggunakan option2 karena sedikit lebih cepat daripada yang lain

Sujit
sumber
5

Antrian di Jawa didefinisikan sebagai antarmuka dan banyak implementasi siap pakai hadir sebagai bagian dari rilis JDK. Berikut adalah beberapa: LinkedList , Antrian Prioritas, ArrayBlockingQueue, ConcurrentLinkedQueue, Antrian Transfer Tertaut, Antrian Sinkron dll.

SO Anda dapat membuat kelas-kelas ini dan menyimpannya sebagai referensi Antrian. sebagai contoh

import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {

 public static void main (String[] args) {
  Queue que = new LinkedList();
  que.add("first");
  que.offer("second");
  que.offer("third");
  System.out.println("Queue Print:: " + que);
  
  String head = que.element();
  System.out.println("Head element:: " + head);
  
  String element1 = que.poll();
  System.out.println("Removed Element:: " + element1);
  
  System.out.println("Queue Print after poll:: " + que);
  String element2 = que.remove();
  System.out.println("Removed Element:: " + element2);
  
  System.out.println("Queue Print after remove:: " + que);  
 }
}

Anda juga dapat mengimplementasikan antarmuka Antrian khusus yang mengimplementasikan Antrian.

Java Guru
sumber
4

Queueadalah antarmuka di java, Anda tidak bisa melakukan itu. mencoba:

Queue<Integer> Q = new LinkedList<Integer>();
lcl
sumber