Pengenalan Java ArrayDeque

1. Gambaran keseluruhan

Dalam tutorial ini, kami akan menunjukkan cara menggunakan kelas ArrayDeque Java - yang merupakan pelaksanaan antara muka Deque .

An ArrayDeque (juga dikenali sebagai "Array Double Berakhir Queue", disebut sebagai "ArrayDeck") adalah sejenis khas tatasusunan growable yang membolehkan kita untuk menambah atau membuang unsur dari kedua-dua belah pihak.

An ArrayDeque pelaksanaan boleh digunakan sebagai Stack (Last-In-First-Out) atau Queue (First-In-First-Out).

2. API Sekilas

Untuk setiap operasi, pada dasarnya kita mempunyai dua pilihan.

Kumpulan pertama terdiri daripada kaedah yang membuang pengecualian sekiranya operasi gagal. Kumpulan lain mengembalikan status atau nilai:

Operasi Kaedah Kaedah membuang Pengecualian
Sisipan dari Ketua tawaranPertama (e) tambahFirst (e)
Pembuangan dari Ketua tinjauan pertama () alih keluarLalu ()
Pengambilan dari Ketua mengintipPertama () dapatkan Pertama ()
Sisipan dari Ekor tawaranLast (e) tambahLast (e)
Pembuangan dari Ekor undianLast () keluarkanLast ()
Pengambilan dari Ekor mengintipLast () getLast ()

3. Menggunakan Kaedah

Mari kita lihat beberapa contoh mudah bagaimana kita dapat memanfaatkan ArrayDeque .

3.1. Menggunakan ArrayDeque sebagai Tumpukan

Kita akan mulakan dengan contoh bagaimana kita dapat memperlakukan kelas sebagai Stack - dan mendorong elemen:

@Test public void whenPush_addsAtFirst() { Deque stack = new ArrayDeque(); stack.push("first"); stack.push("second"); assertEquals("second", stack.getFirst()); } 

Mari kita lihat juga bagaimana kita dapat memasukkan elemen dari ArrayDeque - ketika digunakan sebagai Stack:

@Test public void whenPop_removesLast() { Deque stack = new ArrayDeque(); stack.push("first"); stack.push("second"); assertEquals("second", stack.pop()); } 

The pop kaedah melemparkan NoSuchElementException apabila timbunan kosong.

3.2. Menggunakan ArrayDeque sebagai Antrian

Mari kita mulakan dengan contoh sederhana yang menunjukkan bagaimana kita dapat menawarkan elemen dalam ArrayDeque - apabila digunakan sebagai Antrian sederhana :

@Test public void whenOffer_addsAtLast() { Deque queue = new ArrayDeque(); queue.offer("first"); queue.offer("second"); assertEquals("second", queue.getLast()); } 

Dan mari kita lihat bagaimana kita dapat mengundi elemen dari ArrayDeque , juga ketika digunakan sebagai Antrian :

@Test public void whenPoll_removesFirst() { Deque queue = new ArrayDeque(); queue.offer("first"); queue.offer("second"); assertEquals("first", queue.poll()); } 

The suara kaedah mengembalikan null nilai jika barisan kosong.

4. Bagaimana ArrayDeque Dilaksanakan

Di bawah tudung, ArrayDeque disokong oleh susunan yang menggandakan saiznya apabila diisi.

Pada mulanya, susunan diinisialisasi dengan ukuran 16. Ia dilaksanakan sebagai barisan hujung dua di mana ia mengekalkan dua titik iaitu kepala dan ekor.

Mari lihat logik ini dalam tindakan - pada tahap yang tinggi.

4.1. ArrayDeque sebagai Tumpukan

Seperti yang dapat dilihat, ketika pengguna menambahkan elemen menggunakan metode push , ia menggerakkan penunjuk kepala satu persatu.

Ketika kita memunculkan elemen, elemen tersebut akan meletakkan elemen di posisi kepala sebagai nol sehingga elemen itu dapat dikumpulkan sampah, dan kemudian menggerakkan kembali penunjuk kepala satu persatu.

4.2. ArrayDeque sebagai Antrian

Apabila kita menambahkan elemen menggunakan kaedah tawaran , ia menggerakkan penunjuk ekor satu.

Semasa pengguna meninjau elemen, elemen tersebut menetapkan posisi kepala ke nol sehingga elemen tersebut dapat dikumpulkan sampah, dan kemudian menggerakkan penunjuk kepala.

4.3. Catatan mengenai ArrayDeque

Akhirnya, beberapa nota yang perlu difahami dan diingat mengenai pelaksanaan tertentu ini:

  • Ia tidak selamat untuk benang
  • Elemen batal tidak diterima
  • Berfungsi lebih pantas berbanding Stack yang disegerakkan
  • Beratur lebih pantas daripada LinkedList kerana lokasi rujukan yang lebih baik
  • Sebilangan besar operasi telah dilunaskan kerumitan masa tetap
  • An Pelelar kembali oleh ArrayDeque adalah fail-cepat
  • ArrayDeque menggandakan ukuran array secara automatik apabila penunjuk kepala dan ekor saling bertemu sambil menambahkan elemen

5. Kesimpulan

Dalam artikel pendek ini, kami menggambarkan penggunaan kaedah dalam ArrayDeque .

Pelaksanaan semua contoh ini boleh didapati dalam projek GitHub; ini adalah projek berasaskan Maven, jadi mudah diimport dan dijalankan sebagaimana adanya