ArrayList VS LinkedList

SekhudinSekhudin
4 min read

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 dan remove 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

0
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.