KodeGym/Blog Jawa/Acak/Antarmuka Java Deque
John Squirrels
tingkat
San Francisco

Antarmuka Java Deque

Diterbitake ing grup
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. Antarmuka Java Deque - 1 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. Antarmuka Java Deque - 2

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. Antarmuka Java Deque - 3Jeneng "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. Antarmuka Java Deque - 4Supaya 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

public interface Deque<E> extends Queue<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
Antarmuka Java Deque - 5Kelas 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 ora duwe watesan kapasitas.

Konstruktor kelas ArrayDeque

  • ArrayDeque () nggawe antrian kosong.
  • ArrayDeque (Koleksi <? Ngluwihi E> koleksi) nggawe antrian kapenuhan unsur koleksi Koleksi.
  • 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 colors
public enum Color {
   RED, YELLOW, BLUE;
}

//class for the standard Lego Brick. You can connect or disconnect the Brick, it has color
public class LegoBrick {
   Color color;
   boolean isConnected;

   public void connect() {
       System.out.println("This brick is connected");
       this.isConnected = true;
   }

   public void disconnect() {
       System.out.println("Disconnected");
       isConnected = false;
   }

   public LegoBrick(Color color, boolean isConnected) {
       this.color = color;
       this.isConnected = isConnected;
   }

   public Color getColor() {
       return color;
   }

   public boolean isConnected() {
       return isConnected;
   }

   @Override
   public String toString() {
       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.
import java.util.ArrayDeque;
public class LegoTower {
   ArrayDeque<LegoBrick> myTower;
   int quantityOfReds;
   int quantityOfYellows;

   public void addBrickToTower(LegoBrick newLegoBrick) {
       if (newLegoBrick.getColor() == Color.YELLOW) {
           this.myTower.offerLast(newLegoBrick);
           quantityOfYellows++;
       }
	//we can use addFirst(e)/push(e) instead of offerFirst here
       if (newLegoBrick.getColor() == Color.RED) {
           myTower.offerFirst(newLegoBrick);
           quantityOfReds++;
       }
   }

   public void removeBrickFromTower (LegoBrick legoBrick) {
       if (legoBrick.getColor() == Color.YELLOW) {
           this.myTower.removeLast();
           quantityOfYellows--;
       }
       if (legoBrick.getColor() == Color.RED) {
           myTower.removeFirst();
           quantityOfReds--;
       }
       legoBrick.isConnected = false;

   }

   public LegoTower(int quantityOfReds, int quantityOfYellows) {

       myTower = new ArrayDeque<>();
       this.quantityOfReds = quantityOfReds;
       this.quantityOfYellows = quantityOfYellows;
       for (int i = 0; i < quantityOfReds; i++) {
           LegoBrick redLegoBrick = new LegoBrick(Color.RED, false);
           myTower.addFirst(redLegoBrick);
           redLegoBrick.isConnected = true;
       }
       for (int i = 0; i < quantityOfYellows; i++) {
           LegoBrick yellowLegoBrick = new LegoBrick(Color.YELLOW, false);
           myTower.addLast(yellowLegoBrick);
           yellowLegoBrick.isConnected = true;
       }
   }

   public void setMyTower(ArrayDeque<legobrick> myTower) {
       this.myTower = myTower;
   }

   public void setQuantityOfReds(int quantityOfReds) {
       this.quantityOfReds = quantityOfReds;
   }

   public void setQuantityOfYellows(int quantityOfYellows) {
       this.quantityOfYellows = quantityOfYellows;
   }

   @Override
   public String toString() {
       return "LegoTower{" +
              "myTower=" + myTower +
              ", quantityOfReds=" + quantityOfReds +
              ", quantityOfYellows=" + quantityOfYellows +
              '}';
   }

   public void drawTower() {
       for (LegoBrick i : myTower) {
           System.out.println(i.color);
       }
   }
}


public class Main {
   public static void main(String[] args) {
       LegoBrick legoBrick1 = new LegoBrick(Color.YELLOW, false);
       legoBrick1.connect();
       System.out.println(legoBrick1.toString());
       legoBrick1.disconnect();
       System.out.println(legoBrick1.toString());
       LegoBrick legoBrick2 = new LegoBrick(Color.YELLOW, false);
       LegoBrick legoBrick3 = new LegoBrick(Color.RED, false);
       LegoBrick legoBrick4 = new LegoBrick(Color.RED, false);
       LegoBrick legoBrick5 = new LegoBrick(Color.YELLOW, false);

       LegoTower legoTower = new LegoTower(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. Antarmuka Java Deque - 6LinkedList 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.
public class MyLinkedTest {
   public static void main(String[] args) {
       String h1 = "my";
       String h2 = "favorite";
       String h3 = "book";
//  LinkedList implementation in Java
       LinkedList<string> linkedList = new LinkedList();
       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]
Komentar
  • Popular
  • Anyar
  • lawas
Sampeyan kudu mlebu kanggo ninggalake komentar
Kaca iki durung duwe komentar