Menguasai Java ArrayDeque: Panduan Lengkap & Implementasi Stack
Java ArrayDeque
Panduan ini menjelaskan kelas ArrayDeque, metodenya, dan contoh praktis—termasuk cara menggunakannya sebagai stack.
Di Java, ArrayDeque mengimplementasikan struktur data queue dan deque yang didukung oleh array yang dapat diubah ukurannya.
Interfaces Implemented by ArrayDeque
Kelas ArrayDeque mengimplementasikan antarmuka berikut:
- Java Queue Interface
- Java Deque Interface

Membuat ArrayDeque
Pertama impor paket:
import java.util.ArrayDeque;
Buat instance deque yang diketik:
ArrayDeque<Type> deque = new ArrayDeque<>();
Contoh:
// String deque ArrayDeque<String> animals = new ArrayDeque<>(); // Integer deque ArrayDeque<Integer> ages = new ArrayDeque<>();
Metode Utama ArrayDeque
Menyisipkan Elemen
1. Menggunakan add(), addFirst(), addLast()
add(E e) – menambahkan e ke tail. addFirst(E e) – menyisipkan e di head. addLast(E e) – setara dengan add().
Catatan: Jika deque penuh, metode ini melempar IllegalStateException.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.addFirst("Cat"); animals.addLast("Horse"); System.out.println("ArrayDeque: " + animals);
Output
ArrayDeque: [Cat, Dog, Horse]
2. Menggunakan offer(), offerFirst(), offerLast()
offer(E e) – menambahkan e ke tail, mengembalikan true jika berhasil. offerFirst(E e) – menyisipkan e di head. offerLast(E e) – sama dengan offer().
Catatan: Metode ini mengembalikan false jika deque penuh.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.offer("Dog"); animals.offerFirst("Cat"); animals.offerLast("Horse"); System.out.println("ArrayDeque: " + animals);
Output
ArrayDeque: [Cat, Dog, Horse]
Mengakses Elemen
1. getFirst() dan getLast()
getFirst() – mengembalikan elemen head. getLast() – mengembalikan elemen tail.
Catatan: Melempar NoSuchElementException jika deque kosong.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); System.out.println("First Element: " + animals.getFirst()); System.out.println("Last Element: " + animals.getLast());
Output
ArrayDeque: [Dog, Cat, Horse] First Element: Dog Last Element: Horse
2. peek(), peekFirst(), peekLast()
peek() – mengambil tanpa menghapus head. peekFirst() – sinonim untuk peek(). peekLast() – mengambil tail.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); System.out.println("Head Element: " + animals.peek()); System.out.println("First Element: " + animals.peekFirst()); System.out.println("Last Element: " + animals.peekLast());
Output
ArrayDeque: [Dog, Cat, Horse] Head Element: Dog First Element: Dog Last Element: Horse
Catatan: Jika deque kosong, peek() dan sekawatnya mengembalikan null daripada melempar pengecualian.
Menghapus Elemen
1. remove(), removeFirst(), removeLast()
remove() – menghapus dan mengembalikan head. removeFirst() – sama dengan remove(). removeLast() – menghapus dan mengembalikan tail. remove(Object o) – menghapus kemunculan pertama o jika ada.
Catatan: Melempar NoSuchElementException jika deque kosong atau jika remove(o) tidak dapat menemukan o.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Cow"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); System.out.println("Removed Element: " + animals.remove()); System.out.println("New ArrayDeque: " + animals); System.out.println("Removed First Element: " + animals.removeFirst()); System.out.println("Removed Last Element: " + animals.removeLast());
Output
ArrayDeque: [Dog, Cat, Cow, Horse] Removed Element: Dog New ArrayDeque: [Cat, Cow, Horse] Removed First Element: Cat Removed Last Element: Horse
2. poll(), pollFirst(), pollLast()
poll() – menghapus dan mengembalikan head, atau null jika kosong. pollFirst() – sinonim untuk poll(). pollLast() – menghapus dan mengembalikan tail.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Cow"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); System.out.println("Removed Element: " + animals.poll()); System.out.println("New ArrayDeque: " + animals); System.out.println("Removed First Element: " + animals.pollFirst()); System.out.println("Removed Last Element: " + animals.pollLast());
Output
ArrayDeque: [Dog, Cat, Cow, Horse] Removed Element: Dog New ArrayDeque: [Cat, Cow, Horse] Removed First Element: Cat Removed Last Element: Horse
3. clear()
Mengkosongkan seluruh deque.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); animals.clear(); System.out.println("New ArrayDeque: " + animals);
Output
ArrayDeque: [Dog, Cat, Horse] New ArrayDeque: []
Melakukan Iterasi pada ArrayDeque
iterator() – iterator maju. descendingIterator() – iterator terbalik.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.print("ArrayDeque: "); Iterator<String> it = animals.iterator(); while(it.hasNext()) { System.out.print(it.next() + ", "); } System.out.print("\nArrayDeque in reverse order: "); Iterator<String> rev = animals.descendingIterator(); while(rev.hasNext()) { System.out.print(rev.next() + ", "); }
Output
ArrayDeque: [Dog, Cat, Horse] ArrayDeque in reverse order: [Horse, Cat, Dog]
Metode Umum Lainnya
| Metode | Deskripsi |
element() | Mengambil tanpa menghapus head. |
contains(Object o) | Memeriksa keberadaan o; mengembalikan true jika ditemukan. |
size() | Jumlah elemen dalam deque. |
toArray() | Mengonversi deque ke array. |
clone() | Membuat salin dangkal dari deque. |
Menggunakan ArrayDeque sebagai Stack
Untuk perilaku LIFO, ArrayDeque lebih disukai daripada Stack karena performa yang lebih baik dan tanpa overhead sinkronisasi kode lama.
Metode gaya stack:
push(E e) – menambahkan ke head. peek() – mengambil elemen teratas tanpa penghapusan. pop() – menghapus dan mengembalikan elemen teratas.
ArrayDeque<String> stack = new ArrayDeque<>(); stack.push("Dog"); stack.push("Cat"); stack.push("Horse"); System.out.println("Stack: " + stack); System.out.println("Accessed Element: " + stack.peek()); System.out.println("Removed Element: " + stack.pop());
Output
Stack: [Horse, Cat, Dog] Accessed Element: Horse Removed Element: Horse
ArrayDeque vs LinkedList
Kedua kelas mengimplementasikan Deque, namun berbeda:
LinkedList mengizinkan elemen null; ArrayDeque tidak. - Node LinkedList menyimpan pointer, mengonsumsi lebih banyak memori.
- Untuk beban kerja queue/deque,
ArrayDeque biasanya unggul dibandingkan LinkedList.