Kanggo umume wong, tembung "antrean" ngelingi sawetara asosiasi sing nyenengake. Nanging dina iki kita ngomong babagan antrian sing beda - antrian Jawa. Ing Jawa, antrian yaiku apa wae sing nduweni antarmuka Antrian , sing uga nambah antarmuka Koleksi . Tegese antrian bisa dianggep kaya koleksi.

Antrian ing Jawa ndhukung rong prinsip operasi: FIFO lan LIFO .

Prinsip FIFO (First In, First Out) ngatur antrian biasa - unsur pisanan sing ditambahake ing antrian yaiku sing pisanan ninggalake.

Prinsip LIFO (Last In, First Out) nggambarake prilaku tumpukan - unsur pungkasan sing ditambahake ing antrian yaiku sing pisanan ninggalake . Contone, iki cara sampeyan nggarap dek kertu: sampeyan njupuk kertu saka ndhuwur siji-sijine nganti tekan ngisor dek.

Hierarki Antrian ing Jawa katon kaya iki:

Ing kene sampeyan bisa ndeleng manawa Queue duwe 3 kelas implementasi: LinkedList , ArrayDeque lan PriorityQueue . LinkedList lan ArrayDeque langsung ora warisan Queue , nanging Deque .

Deque minangka antarmuka sing ditambahake ing Jawa 6. Iki kalebu sawetara cara sing migunani kanggo antrian lan ngidini antrian bisa digunakake minangka antrian pindho (utawa bidirectional). Tegese bisa dadiFIFOlanLIFO.

Salah siji saka loro turunan antarmuka Deque iku ArrayDeque . Ndhukung antrian kaping pindho sing ngidini sampeyan nglebokake lan mbusak unsur saka ujung loro. Iku uga array dinamis sing kanthi otomatis tuwuh ing ukuran.

Ana uga kelas PriorityQueue , sing minangka turunan langsung saka Queue : tumindake beda karo kelas sing ngetrapake Deque .

PriorityQueue minangka antrian prioritas sing ngatur unsur miturut urutan alam minangka standar. Ing kene ngurutake nggunakake antarmuka Comparable lan Comparator . Prinsipe padha karo TreeSet utawa TreeMap - kelas sing nggunakake antarmuka Comparable lan duwe urutan urutan dhewe.

PriorityQueue<String> priorityQueue = new PriorityQueue<>(Comparator.comparingInt(String::length));

priorityQueue.add("Andrew");
priorityQueue.add("John");
priorityQueue.add("Rob");

while (!priorityQueue.isEmpty()) {
   System.out.println(priorityQueue.remove());
}

Yen sampeyan mbukak conto iki, sampeyan bakal weruh ing console:

Rob
John
Andrew

Amarga kita nggarap antrian lan dudu koleksi biasa, kita kudu mbusak unsur kasebut saka dhaptar. Kanggo nindakake iki, kita nggunakake konstruksi iki:

while (!priorityQueue.isEmpty()) {
            System.out.println(priorityQueue.remove());
}

Antarmuka Deque marisi metode Antrian lan nambah sawetara cara sing menarik:

void addFirst(E obj) Nambahake unsur obj ing ngarep antrian
void addLast(E obj) Nambahake unsur obj ing mburi antrian
E getfirst() Ngasilake unsur pisanan saka antrian
E getLast() Ngasilake unsur pungkasan saka antrian
tawaran booleanFirst(E obj) Nambahake unsur obj ing ngarep antrian, lan bali bener yen unsur ditambahake. Yen ora, bali palsu .
tawaran booleanTerakhir(E obj) Nambahake unsur obj ing mburi antrian, lan bali bener yen unsur ditambahake. Yen ora, bali palsu .
E pop() Entuk unsur pisanan saka antrian lan mbusak
void push (E obj) Nambahake unsur obj ing ngarep antrian
E ngintip dulu() Ngasilake (nanging ora mbusak) unsur pisanan saka antrian
E peek Last() Ngasilake (nanging ora mbusak) unsur pungkasan saka antrian
E pollFirst() Ngasilake lan mbusak unsur pisanan saka antrian. Ngasilake null yen ora ana unsur.
E pollLast() Ngasilake lan mbusak unsur pungkasan saka antrian. Ngasilake null yen ora ana unsur.
E removeLast() Ngasilake lan mbusak unsur pisanan saka antrian. Mbuwang pangecualian yen ora ana unsur.
E removeFirst() Ngasilake lan mbusak unsur pungkasan antrian. Mbuwang pangecualian yen ora ana unsur.
boolean removeFirstOccurrence(Object obj) Mbusak kedadeyan pisanan obj saka antrian
boolean removeLastOccurrence(Object obj) Mbusak kedadeyan pungkasan obj saka antrian

Ayo saiki katon ing sawetara cara iki ing laku.

Pisanan, ayo nambah unsur menyang antrian:

Deque<String> deque = new ArrayDeque<>();

        deque.add("Apple"); // Adds "Apple" to the end of the queue
        deque.addFirst("Orange"); // Adds "Orange" to the front of the queue
        deque.addLast("Pineapple"); // Adds "Pineapple" to the end of the queue

        System.out.println(deque);
[Orange, Apple, Nanas]

Saiki ayo entuk nilai saka antrian:

Deque<String> deque = new ArrayDeque<>();

deque.add("Apple");
        deque.addFirst("Orange");
        deque.addLast("Pineapple");


        System.out.println("The first element is: "+ deque.getFirst());

        System.out.println("The last element is: " + deque.getLast());

    }

Kode iki nampilake unsur pisanan lan pungkasan ing antrian.

Unsur pisanan yaiku: Oranye
Unsur pungkasan yaiku: Nanas

Deque<String> deque = new ArrayDeque<>();

        deque.add("Apple");
        deque.addFirst("Orange");
        deque.addLast("Pineapple");
        deque.add("Lemon");

System.out.println(deque.pop()); // Get and remove the first element of the queue
System.out.println(deque.poll()); // Get and remove the first element of the queue

System.out.println(deque);

Nganggo kode iki, kita entuk:


Apel Jeruk

[Nanas, Lemon]

Bentenipun antarane pop () lan polling () iku pop () bakal uncalan NoSuchElementException yen dhaftar kosong dhaftar, nanging jajak pendapat () bakal bali null .

Saiki kita bakal nimbang metode pollFirst () lan pollLast () .

Deque<String> deque = new ArrayDeque<>();

        deque.add("Apple");
        deque.addFirst("Orange");
        deque.addLast("Pineapple");
        deque.add("Lemon");

System.out.println(deque.pollFirst()); // Get and remove the first element of the queue
System.out.println(deque.pollLast()); // Get and remove the last element of the queue.
System.out.println(deque);
Jeruk
Lemon
[Apel, Nanas]

Loro-lorone cara bali lan mbusak nilai saka antrian.

Iki conto nggunakake metode peekFirst () lan peekLast () :

Deque<String> friends = new ArrayDeque<>();

friends.add("John");
friends.add("Rob");
friends.add("Greg");
friends.add("Max");
friends.add("Oliver");

System.out.println("The first element is: " + friends.peekFirst());
System.out.println("The last element is: " + friends.peekLast());

System.out.println(friends);
Unsur pisanan yaiku: John
Unsur pungkasan yaiku: Oliver
[John, Rob, Greg, Max, Oliver]

Loro-lorone cara ngasilake unsur pisanan / pungkasan saka antrian lan ora mbusak. Yen antrian kosong, null bakal bali.

Inggih rampung! Dina iki kita sinau carane nggarap antrian ing Jawa. Saiki sampeyan ngerti carane nggunakake ing laku.