unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
List

List #

Dalam Java, List adalah salah satu antarmuka (interface) dalam koleksi framework yang mewakili urutan elemen yang dapat diakses berdasarkan indeks mereka. List memungkinkan penyimpanan elemen-elemen duplikat dan memberikan kontrol penuh atas elemen-elemen tersebut melalui berbagai operasi. Ada beberapa implementasi dari antarmuka List yang populer digunakan, masing-masing dengan karakteristik dan performa yang berbeda.

ArrayList #

ArrayList adalah implementasi dari antarmuka List yang didasarkan pada array yang dapat berubah ukurannya. Ini adalah pilihan yang bagus ketika Anda memerlukan operasi akses elemen yang cepat dan tidak terlalu sering menambahkan atau menghapus elemen dari tengah list.

Operasi Dasar #

  • Membuat ArrayList

    List<String> list = new ArrayList<>();
    
  • Menambahkan Elemen

    list.add("A");
    list.add("B");
    list.add("C");
    
  • Mengakses Elemen Berdasarkan Indeks

    String elemenPertama = list.get(0); // Mengakses elemen pertama
    
  • Mengganti Elemen di Indeks Tertentu

    list.set(1, "D"); // Mengganti elemen kedua dengan "D"
    
  • Menghapus Elemen Berdasarkan Indeks atau Nilai

    list.remove(0); // Menghapus elemen pertama
    list.remove("C"); // Menghapus elemen dengan nilai "C"
    
  • Mendapatkan Ukuran List

    int ukuran = list.size();
    
  • Memeriksa Apakah List Mengandung Elemen Tertentu

    boolean adaElemenB = list.contains("B");
    
  • Iterasi Melalui List

    for (String elemen : list) {
        System.out.println(elemen);
    }
    

Karakteristik ArrayList:

  • Akses Elemen Cepat: Akses elemen berdasarkan indeks sangat cepat (O(1)).
  • Penambahan dan Penghapusan Lambat di Tengah: Menambahkan atau menghapus elemen di tengah list relatif lambat (O(n)) karena elemen-elemen berikutnya perlu dipindahkan.

LinkedList #

LinkedList adalah implementasi dari antarmuka List yang didasarkan pada struktur data linked list. Setiap elemen dalam linked list berisi referensi ke elemen berikutnya (dan sebelumnya dalam kasus linked list ganda). LinkedList adalah pilihan yang baik ketika Anda sering menambahkan atau menghapus elemen dari awal atau tengah list.

Operasi Dasar #

  • Membuat LinkedList

    List<String> linkedList = new LinkedList<>();
    
  • Menambahkan Elemen

    linkedList.add("X");
    linkedList.add("Y");
    linkedList.add("Z");
    
  • Mengakses Elemen Berdasarkan Indeks

    String elemenPertama = linkedList.get(0);
    
  • Menambahkan Elemen di Awal atau Akhir

    linkedList.addFirst("A"); // Menambahkan di awal
    linkedList.addLast("B"); // Menambahkan di akhir
    
  • Menghapus Elemen dari Awal atau Akhir

    linkedList.removeFirst(); // Menghapus elemen pertama
    linkedList.removeLast(); // Menghapus elemen terakhir
    
  • Iterasi Melalui List

    for (String elemen : linkedList) {
        System.out.println(elemen);
    }
    

Karakteristik LinkedList:

  • Akses Elemen Lebih Lambat: Mengakses elemen berdasarkan indeks lebih lambat (O(n)) dibandingkan ArrayList.
  • Penambahan dan Penghapusan Cepat: Menambahkan atau menghapus elemen di awal atau tengah list lebih cepat (O(1) untuk operasi di awal atau akhir).

Vector #

Vector adalah implementasi dari List yang mirip dengan ArrayList, tetapi bersifat thread-safe, artinya operasi pada Vector aman digunakan dalam lingkungan multithreading karena metode-metodenya disinkronkan.

Operasi Dasar #

  • Membuat Vector

    List<String> vector = new Vector<>();
    
  • Menambahkan Elemen

    vector.add("1");
    vector.add("2");
    vector.add("3");
    
  • Mengakses Elemen Berdasarkan Indeks

    String elemenPertama = vector.get(0);
    
  • Menghapus Elemen

    vector.remove(1);
    

Karakteristik Vector:

  • Thread-Safe: Metode-metode Vector disinkronkan, sehingga aman digunakan di lingkungan multithreading.
  • Lebih Lambat: Karena penyinkronan, Vector umumnya lebih lambat dibandingkan ArrayList.

Stack #

Stack adalah subclass dari Vector yang mengikuti prinsip LIFO (Last In, First Out). Ini berarti elemen terakhir yang dimasukkan ke dalam stack adalah elemen pertama yang diambil.

Operasi Dasar #

  • Membuat Stack

    Stack<String> stack = new Stack<>();
    
  • Menambahkan Elemen ke Stack (Push)

    stack.push("A");
    stack.push("B");
    stack.push("C");
    
  • Menghapus dan Mengembalikan Elemen Teratas (Pop)

    String elemenTeratas = stack.pop();
    
  • Melihat Elemen Teratas Tanpa Menghapusnya (Peek)

    String elemenTeratas = stack.peek();
    
  • Memeriksa Apakah Stack Kosong

    boolean isEmpty = stack.isEmpty();
    

Karakteristik Stack:

  • LIFO: Elemen yang terakhir dimasukkan adalah elemen pertama yang diambil.
  • Penggunaan Umum: Stack digunakan dalam banyak algoritma, seperti penelusuran depth-first search (DFS), undo operation dalam aplikasi, dan lain-lain.

CopyOnWriteArrayList #

CopyOnWriteArrayList adalah versi thread-safe dari ArrayList yang digunakan dalam situasi di mana list lebih sering dibaca daripada diubah. Saat terjadi perubahan, list lama tetap tidak berubah, dan perubahan dilakukan pada salinan baru dari list.

Operasi Dasar #

  • Membuat CopyOnWriteArrayList

    List<String> cowList = new CopyOnWriteArrayList<>();
    
  • Menambahkan Elemen

    cowList.add("1");
    cowList.add("2");
    
  • Iterasi Melalui List (Thread-Safe)

    for (String elemen : cowList) {
        System.out.println(elemen);
    }
    

Karakteristik CopyOnWriteArrayList:

  • Thread-Safe: Iterasi aman dalam lingkungan multithreading tanpa perlu sinkronisasi eksternal.
  • Efisiensi dalam Membaca: Efisien untuk operasi baca (read) yang sering, tetapi tidak ideal untuk operasi tulis (write) yang sering.

Kesimpulan #

Java menyediakan beberapa implementasi List, masing-masing dengan karakteristik dan kegunaan spesifik:

  • ArrayList: Cocok untuk operasi akses elemen yang cepat, tetapi kurang efisien untuk penambahan atau penghapusan elemen di tengah list.
  • LinkedList: Ideal untuk penambahan dan penghapusan elemen di awal atau tengah list, tetapi akses elemen berdasarkan indeks lebih lambat.
  • Vector: Mirip dengan ArrayList, tetapi thread-safe.
  • Stack: Mengikuti prinsip LIFO dan merupakan subclass dari Vector.
  • CopyOnWriteArrayList: Thread-safe dan ideal untuk situasi di mana operasi baca jauh lebih sering daripada operasi tulis.

Dengan memahami karakteristik masing-masing implementasi List, Anda dapat memilih struktur data yang paling sesuai untuk kebutuhan spesifik aplikasi Anda.

« Eksepsi
Map »