ArrayList VS LinkedList
Table of contents
Hello gengs, ada gak diantara kalian yang masih bingung perbedaan ArrayList
dengan LinkedList
? Nah, berikut aku share catatan kecil terkait perbedaan diantara keduanya yah.
Btw, kalau ada kekeliruan atau kesalahan pada catatanku ini tolong bantu koreksi ya. Terimakasih… Cekicroootttttt…..
Struktur Data
ArrayList Menggunakan array dinamis, sehingga otomatis akan bertambah ketika penuh.
LinkedList Menggunakan double linked list, setiap elemen(node) menyimpan referensi ke elemen sebelum dan sesudahnya.
Operasi Akses Elemen
ArrayList Sangat cepat karena dapat mengakses elemen langsung dengan menggunakan indeks.
LinkedList Lebih lambat dari ArrayList karena harus menelusuri satu persatu dari awal hingga akhir hingga mencapai indeks yang diinginkan.
Contoh:
// Akses cepat pada ArrayList
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("Apple");
arrayList.add("Banana");
System.out.println(arrayList.get(1)); // "Banana"
// Akses lebih lambat pada LinkedList
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("Apple");
linkedList.add("Banana");
System.out.println(linkedList.get(1)); // "Banana"
Penambahan/Penghapusan Elemen
ArrayList
Penambahan di akhir sangat cepat, kecuali jika array harus diperbesar, yang membuatnya lebih lambat.
Penambahan/penghapusan di tengah lambat, karena karena elemen-elemen lain perlu digeser untuk menjaga urutan.
LinkedList
Penambahan/penghapusan diakhir sangat cepat, karena hanya perlu memperbarui referensi elemen saja.
Penambahan/pengahapusan di tengah lebih efisien daripada ArrayList, tetapi tetap butuh waktu untuk mencari posisi elemen.
Contoh penambahan di tengah:
// Penambahan pada ArrayList (elemen-elemen setelahnya harus digeser)
arrayList.add(1, "Blueberry"); // Lebih lambat untuk list besar
// Penambahan pada LinkedList (tidak perlu menggeser elemen, hanya memperbarui referensi)
linkedList.add(1, "Blueberry");
Penggunaan Memori
ArrayList Karena menggunakan array,
ArrayList
dapat memboroskan memori jika alokasi kapasitas terlalu besar, terutama ketika terdapat banyak ruang kosong yang belum digunakan.LinkedList Memerlukan lebih banyak memori karena setiap elemen menyimpan dua referensi (ke elemen sebelumnya dan berikutnya), namun tidak memboroskan ruang kosong seperti
ArrayList
.
Ketahanan Terhadapa Perubahan Ukuran
ArrayList Ukuran array bisa bertambah secara otomatis jika kapasitas penuh, namun proses ini memerlukan pengalokasian ulang dan penyalinan elemen ke array baru yang lebih besar.
LinkedList Tidak memiliki batasan kapasitas awal, sehingga mudah menyesuaikan dengan perubahan ukuran. Namun, setiap penambahan node baru memerlukan alokasi memori tambahan untuk referensi elemen.
Ketergunaan dalam Aplikasi Nyata
ArrayList Ideal untuk aplikasi yang membutuhkan akses acak cepat dan penambahan elemen di akhir. Contoh: Daftar produk dalam katalog, di mana elemen jarang ditambahkan di tengah atau di awal.
LinkedList Lebih cocok untuk aplikasi yang membutuhkan seringnya operasi penambahan atau penghapusan elemen di awal, akhir, atau tengah list. Contoh: Implementasi queue (antrian) atau stack (tumpukan), di mana elemen sering ditambahkan dan dihapus di kedua ujung.
Kapan Menggunakan ArrayList atau LinkedList
Gunakan ArrayList Ketika:
Anda membutuhkan akses cepat ke elemen menggunakan indeks.
Penambahan elemen terutama terjadi di akhir list.
Aplikasi tidak sering menghapus atau menambah elemen di tengah list.
Gunakan LinkedList Ketika:
Penambahan atau penghapusan elemen sering terjadi di awal atau tengah list.
Akses ke elemen melalui indeks tidak terlalu sering dilakukan.
Membutuhkan implementasi queue atau stack.
Penggunaan sebagai Stack (Tumpukan)
ArrayList
ArrayList dapat digunakan sebagai stack, tetapi tidak memiliki method khusus untuk operasi ini. Sebagai gantinya, kita bisa menggunakan
add
danremove
untuk mensimulasikan operasi stack.LinkedList
LinkedList juga dapat berfungsi sebagai stack karena mendukung penambahan dan penghapusan elemen dari ujung list, menggunakan method seperti:
push(E element)
: Menambahkan elemen di awal list, berfungsi seperti operasi push pada stack.pop()
: Menghapus elemen pertama dari list, berfungsi seperti operasi pop pada stack. Contoh LinkedList:
LinkedList<String> stack = new LinkedList<>();
stack.push("Apple"); // Push elemen di awal
stack.push("Banana");
System.out.println("Stack setelah push: " + stack);
// Output [Banana, Apple]
String top = stack.pop(); // Pop elemen pertama (Banana)
System.out.println("Elemen yang di-pop: " + top);
// Output: Banana
System.out.println("Stack setelah pop: " + stack);
// Output: [Apple]
Penggunaan sebagai Deque (Double-ended Queue)
ArrayList
ArrayList tidak memiliki method-method spesifik yang mendukung deque karena lebih fokus pada operasi berbasis array.
LinkedList
LinkedList mendukung interface
Deque
sehingga bisa digunakan untuk implementasi deque (double-ended queue) yang memungkinkan penambahan dan penghapusan elemen di kedua ujung list. Method yang mendukung penggunaan sebagai deque:offerFirst(E e)
: Menambahkan elemen di awal deque.offerLast(E e)
: Menambahkan elemen di akhir deque.pollFirst()
: Mengambil dan menghapus elemen pertama.pollLast()
: Mengambil dan menghapus elemen terakhir.
Kesimpulan
ArrayList unggul dalam hal akses cepat dengan indeks dan penambahan di akhir list. Ini cocok digunakan ketika operasi akses lebih penting daripada penghapusan atau penambahan elemen di tengah.
LinkedList lebih fleksibel dalam hal penambahan dan penghapusan elemen di berbagai posisi dengan efisiensi yang lebih baik dibandingkan
ArrayList
, tetapi kurang cocok untuk aplikasi yang sering membutuhkan akses acak.
Author
Sekhudin
Web: syaikhu.com
Email: sekhudinpbg3@gmail.com
Blog: blog.syaikhu.com
Subscribe to my newsletter
Read articles from Sekhudin directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Sekhudin
Sekhudin
I am a passionate programming enthusiast with a great interest in software engineering.