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