Java Deque minangka struktur data sing nggabungake Antrian lan Stack biasa. Sampeyan bisa nambah lan mbusak unsur loro kanggo sirah lan kanggo buntut saka Deque. Ing antrian "tradisional" sampeyan nambah unsur ing buntut saka baris (sawise unsur pungkasan) lan mbusak unsur saka kepala antrian. Prinsip iki diarani First In First Out (FIFO) lan kerjane kaya baris pelanggan biasa ing urip nyata. Ing Java Queue minangka Antarmuka, bagean saka Framework Koleksi. Ana uga struktur data penting sing disebut Stack, dhaptar sing bisa digunakake karo unsur-unsur ing prinsip mbalikke, LIFO - pungkasan ing, pisanan metu. Iku padha karo tumpukan piring, nambah utawa mbusak mung bisa ing ndhuwur.
Antrian vs Deque
Deque minangka jinis Antrian sing aneh: sampeyan bisa nambah unsur anyar ing buntut lan sirah baris. Crita sing padha karo mbusak: sampeyan bisa mbusak unsur pungkasan utawa pisanan saka struktur iki. Mula, misale jek dadi campuran Stack lan Queue. Jeneng "Deque" tegese "Antrian Rampung Ganda". "Deque" diucapake kaya "dek" kertu lan sampeyan ngerti apa? Luwih padha karo dek nyata: sampeyan bisa njupuk kertu saka ngisor utawa ndhuwur dek kasebut. Pengin nambah utawa mbusak unsur saka loro-lorone saka sawetara struktur linear? Gunakake Deque. Java 8 utawa meh kabeh versi liyane ndhukung. Mbayangno bata lego khas lan "menara" siji kolom sing digawe saka bata. Sampeyan bisa nambah bata anyar ing ndhuwur menara utawa ing ngisor. Sampeyan uga bisa mbusak bata saka loro-lorone. Kene kita duwe conto: kita nambah kabeh bata kuning ing ndhuwur lan kabeh abang ing ngisor. Kita bakal nduduhake conto iki nganggo kode Jawa. Supaya sampeyan bisa enqueue lan dequeue saka loro ends Java Deque, tegese sampeyan bisa nggunakake Deque minangka loro antrian lan tumpukan. Waca babagan Stack in Java: Java Stack 101: Delving into the Stack Class Waca babagan Queue in Java: Java Queue Interface lan implementasine
fitur Deque kang
Deque ing Jawa minangka Antarmuka, sing implementasine nyedhiyakake dhukungan saka array sing bisa diowahi ukurane. Dadi sampeyan duwe macem-macem kapasitas tanpa watesan lan sampeyan bisa nambah unsur anyar miturut kabutuhan sampeyan.
Akses bebarengan dening pirang-pirang utas ora didhukung dening Deque
Deque ora thread-aman ing cilik saka anané sinkronisasi external.
Ora ana unsur Null sing diidini ing array deque.
Deque Java Interface deklarasi
publicinterfaceDeque<E>extendsQueue<E>
Metode Java Deque
java.util.Deque iku sawijining Interface sing ngluwihi Java Queue Interface lan makili antrian pindho rampung. Supaya sampeyan bisa nggunakake kabeh cara Java Queue nalika nggarap Deque. Sanajan Deque ora ngluwihi antarmuka Stack, antarmuka Deque nemtokake cara sing ngidini sampeyan nindakake operasi tumpukan khas kayata push , peek lan pop .
boolean add(elemen) nambah unsur menyang buntut Deque. Ngasilake bener nalika sukses, mbuwang IllegalStateException yen ora ana papan sing kasedhiya.
addFirst (unsur) nambah unsur kanggo sirah Deque.
addLast (elemen) nambah unsur menyang buntut Deque.
tawaran (elemen) nambah unsur kanggo buntut lan ngasilake boolean kanggo nerangake yen selipan wis sukses.
offerFirst(elemen) nambahake unsur ing sirah lan ngasilake boolean kanggo nerangake yen sisipan kasebut sukses.
offerLast(elemen) nambahake unsur menyang buntut lan ngasilake boolean kanggo nerangake yen sisipan kasebut sukses.
iterator () ngasilake iterator kanggo deque.
descendingIterator () ngasilake iterator sing duwe urutan mbalikke kanggo deque iki.
push (unsur) nambah unsur kanggo sirah.
pop (unsur) mbusak unsur saka sirah lan bali.
removeFirst () mbusak unsur ing sirah.
removeLast () mbusak unsur ing buntut.
jajak pendapat () retrieves lan mbusak sirah antrian dituduhake dening deque iki (ing tembung liyane, unsur pisanan deque iki), utawa bali null yen deque iki kosong.
pollFirst () retrieves lan mbusak unsur pisanan saka deque iki, utawa bali null yen deque iki kosong.
pollLast () retrieves lan mbusak unsur pungkasan saka deque iki, utawa bali null yen deque iki kosong.
Ndeleng () retrieves, nanging ora mbusak, kepala antrian dituduhake dening deque iki (ing tembung liyane, unsur pisanan deque iki), utawa bali null yen deque iki kosong.
peekFirst () retrieves, nanging ora mbusak, unsur pisanan saka deque iki, utawa bali null yen deque iki kosong.
peekLast () retrieves, nanging ora mbusak, unsur pungkasan deque iki, utawa bali null yen deque iki kosong.
Ing tabel ing ngisor iki, kabeh cara dipérang dadi klompok. Nalika sampeyan bisa ndeleng, ana macem-macem cara kanggo nambah lan mbusak unsur. Contone, loro removeFirst () lan pop () mbusak unsur pisanan saka deque. Sing nomer loro "teka" saka tumpukan. Tegese yen sampeyan nggunakake ArrayDeque minangka tumpukan mung, nggunakake pop () kanggo mbusak, push () kanggo nambah lan Ndeleng () kanggo mriksa. Iki nggawe kode sampeyan luwih wicaksana kanggo pangembang liyane.
Elemen pisanan (Kepala)
Unsur pungkasan (buntut)
Operasi
Mbuwang Pangecualian
Nilai Khusus
Mbuwang Pangecualian
Nilai Khusus
sisipan
addFirst(e)/push(e)
tawaran pisanan (e)
addLast(e)
tawaranPungkasan()
Mbusak
removeFirst()/pop()
pollFirst()
removeLast()
pollLast()
nliti
getfirst()
peekFirst()/peek()
getLast()
peekLast()
Deque Implementations
Java Deque minangka antarmuka lan nduweni implementasi ing Java Collections API:
java.util.LinkedList //List lan implementasine Deque
java.util.ArrayDeque //Implementasine Deque, perpustakaan Jawa
Kelas LinkedList nggunakake dhaptar sing digandhengake kaping pindho kanggo model antrian utawa deque. Kelas ArrayDeque nyimpen unsur internal ing array. Yen jumlah unsur ngluwihi volume larik, larik anyar diparengake, lan kabeh unsur dipindhah liwat. Tegese ArrayDeque tuwuh kanthi kabutuhan.
Kelas ArrayDeque
Kelas ArrayDeque <E> minangka antrian loro arah umum, sing nduweni fungsi saka kelas AbstractCollection lan nggunakake antarmuka Deque. ArrayDeque nyedhiyakake fasilitas nggunakake deque lan resizable-array. Kaping pisanan, array diinisialisasi kanthi ukuran 16. Iki diimplementasikake minangka antrian loro-lorone, ing ngendi ndhukung rong pointer, yaiku sirah lan buntut. Iku warisan kelas AbstractCollection lan ngleksanakake antarmuka Deque . Poin penting babagan kelas ArrayDeque yaiku:
Sampeyan bisa nambah utawa mbusak unsur saka buntut lan sirah ArrayDeque
Null unsur ora diijini
ArrayDeque ora aman, tanpa sinkronisasi eksternal.
ArrayDeque (kapasitas int) nggawe antrian karo kapasitas kapasitas dhisikan . Yen sampeyan ora nemtokake kapasitas wiwitan, kapasitas standar yaiku 16.
Tuladha Java Deque - ArrayDeque
Elinga Conto Menara Lego saka wiwitan artikel? Ayo nggawe kelas kanggo Mbangun Menara siji kolom sing digawe saka Lego Bricks. Bata bisa abang, kuning utawa biru. Aturan bangunan Menara kita: kita sijine bata abang ing ngisor lan bata kuning ing ndhuwur. Tuladha Dek Jawa Gedhe
//enum with colorspublicenumColor{RED,YELLOW,BLUE;}//class for the standard Lego Brick. You can connect or disconnect the Brick, it has colorpublicclassLegoBrick{Color color;boolean isConnected;publicvoidconnect(){System.out.println("This brick is connected");this.isConnected =true;}publicvoiddisconnect(){System.out.println("Disconnected");
isConnected =false;}publicLegoBrick(Color color,boolean isConnected){this.color = color;this.isConnected = isConnected;}publicColorgetColor(){return color;}publicbooleanisConnected(){return isConnected;}@OverridepublicStringtoString(){return"LegoBrick{"+"color="+ color +", isConnected="+ isConnected +'}';}}
Punika kelas Menara kita. Kita miwiti menara. Menara sing diwiwiti gumantung saka jumlah abang lan kuning. Kita bisa nambah bata menyang menara utawa mbusak. Kita nambah bata ing ndhuwur yen kuning lan nambah ing ngisor yen abang.
importjava.util.ArrayDeque;publicclassLegoTower{ArrayDeque<LegoBrick> myTower;int quantityOfReds;int quantityOfYellows;publicvoidaddBrickToTower(LegoBrick newLegoBrick){if(newLegoBrick.getColor()==Color.YELLOW){this.myTower.offerLast(newLegoBrick);
quantityOfYellows++;}//we can use addFirst(e)/push(e) instead of offerFirst hereif(newLegoBrick.getColor()==Color.RED){
myTower.offerFirst(newLegoBrick);
quantityOfReds++;}}publicvoid removeBrickFromTower (LegoBrick legoBrick){if(legoBrick.getColor()==Color.YELLOW){this.myTower.removeLast();
quantityOfYellows--;}if(legoBrick.getColor()==Color.RED){
myTower.removeFirst();
quantityOfReds--;}
legoBrick.isConnected =false;}publicLegoTower(int quantityOfReds,int quantityOfYellows){
myTower =newArrayDeque<>();this.quantityOfReds = quantityOfReds;this.quantityOfYellows = quantityOfYellows;for(int i =0; i < quantityOfReds; i++){LegoBrick redLegoBrick =newLegoBrick(Color.RED,false);
myTower.addFirst(redLegoBrick);
redLegoBrick.isConnected =true;}for(int i =0; i < quantityOfYellows; i++){LegoBrick yellowLegoBrick =newLegoBrick(Color.YELLOW,false);
myTower.addLast(yellowLegoBrick);
yellowLegoBrick.isConnected =true;}}publicvoidsetMyTower(ArrayDeque<legobrick> myTower){this.myTower = myTower;}publicvoidsetQuantityOfReds(int quantityOfReds){this.quantityOfReds = quantityOfReds;}publicvoidsetQuantityOfYellows(int quantityOfYellows){this.quantityOfYellows = quantityOfYellows;}@OverridepublicStringtoString(){return"LegoTower{"+"myTower="+ myTower +", quantityOfReds="+ quantityOfReds +", quantityOfYellows="+ quantityOfYellows +'}';}publicvoiddrawTower(){for(LegoBrick i : myTower){System.out.println(i.color);}}}publicclassMain{publicstaticvoidmain(String[] args){LegoBrick legoBrick1 =newLegoBrick(Color.YELLOW,false);
legoBrick1.connect();System.out.println(legoBrick1.toString());
legoBrick1.disconnect();System.out.println(legoBrick1.toString());LegoBrick legoBrick2 =newLegoBrick(Color.YELLOW,false);LegoBrick legoBrick3 =newLegoBrick(Color.RED,false);LegoBrick legoBrick4 =newLegoBrick(Color.RED,false);LegoBrick legoBrick5 =newLegoBrick(Color.YELLOW,false);LegoTower legoTower =newLegoTower(2,5);System.out.println("my Initiated Lego Tower: ");
legoTower.drawTower();
legoTower.addBrickToTower(legoBrick1);
legoTower.addBrickToTower(legoBrick2);
legoTower.addBrickToTower(legoBrick3);
legoTower.addBrickToTower(legoBrick4);
legoTower.addBrickToTower(legoBrick5);System.out.println("My LegoTower after adding some elements: ");
legoTower.drawTower();
legoTower.removeBrickFromTower(legoBrick1);
legoTower.removeBrickFromTower(legoBrick3);System.out.println("We removed one red and one yellow brick:");
legoTower.drawTower();}}
Asil saka mbukak program iki:
my Initiated LegoTower:
RED
RED
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
My LegoTower after adding some elements:
RED
RED
RED
RED
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
We removed one red and one yellow brick:
RED
RED
RED
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
YELLOW
Process finished with exit code 0
Ngenteni, opo?? Kenapa abang ing ndhuwur? Ora, padha ora. Dheweke mung dicithak menyang konsol wiwit saka pisanan (ngisor) nganti pungkasan (ndhuwur). Dadi yen sampeyan pengin ndeleng kaya ing gambar karo bata ndhuwur, sampeyan bisa ngganti cara drawTower saka kelas LegoTower. Iku tugas gampang banget!
LinkedList
Antarmuka List njaga urutan nambah item lan ngidini akses menyang item kanthi indeks. Deque minangka antrian loro-lorone, lan ndhukung nambah lan mbusak unsur saka loro-lorone. LinkedList utamané dikenal minangka implementasine List, nanging uga kelas iki ngleksanakake Deque, lan ngidini kita nggawe antrian bidirectional dumadi saka sembarang obyek kalebu null. LinkedList minangka kumpulan unsur. Kita bisa ndeleng ing sumber kode saka kelas, wektu iki mbayar manungsa waé kanggo kothak: Kene kita nambah siji conto, nanging yen sampeyan pengin sinau liyane babagan LinkedList, welcome kanggo artikel CodeGym iki .
Implementasi dhaptar link ing Jawa, nambah lan mbusak unsur. Tuladha
Ayo nyoba operasi kasebut ing praktik. Pisanan, implementasine Java LinkedList: nggawe LinkedList of Strings, nambah ana 3 unsur. Banjur copot siji, banjur tambahake siji ing tengah.
publicclassMyLinkedTest{publicstaticvoidmain(String[] args){String h1 ="my";String h2 ="favorite";String h3 ="book";// LinkedList implementation in JavaLinkedList<string> linkedList =newLinkedList();
linkedList.add(h1);
linkedList.add(h2);
linkedList.add(h3);System.out.println("my list after adding 3 elements:");System.out.println(linkedList);System.out.println("element #2 of my list:");System.out.println(linkedList.get(2));
linkedList.remove(1);System.out.println("my list after removing #1:");System.out.println(linkedList);
linkedList.add(1,"first");System.out.println("my list after adding an element in the middle");System.out.println(linkedList);}
Asil saka mbukak program iki:
my list after adding 3 elements:
[my, favorite, book]
element #2 of my list:
book
my list after removing #1:
[my, book]
my list after adding an element in the middle
[my, first, book]