Sebuah arsitektur terpadu yang menyediakan serangkaian interface dan kelas untuk merepresentasikan dan memanipulasi kumpulan data (koleksi). ⚙️
Komponen Utama:
Interfaces: Tipe data abstrak yang mendefinisikan kontrak untuk berbagai jenis koleksi (misalnya List, Set, Map). Semua core interface bersifat generik.
Implementations: Kelas konkret yang menyediakan implementasi dari interface tersebut (misalnya ArrayList, HashSet, HashMap).
Algorithms: Metode statis polimorfik yang melakukan operasi pada koleksi (misalnya sort, shuffle).
Interface Collection<E>
Akar dari hierarki koleksi. Merepresentasikan sekelompok objek yang disebut elemen.
Tujuan: Digunakan sebagai tipe parameter ketika metode perlu menerima koleksi apa pun tanpa peduli implementasi spesifiknya.
Operasi Massal:containsAll(), addAll(), removeAll(), retainAll(), clear().
Operasi Array:Object[] toArray(), <T> T[] toArray(T[] a).
Set<E> Interface
Sebuah koleksi yang tidak boleh mengandung elemen duplikat.
Karakteristik Utama: Melarang duplikasi berdasarkan metode equals() dari elemen. Jika e1.equals(e2) adalah true, maka e1 dan e2 dianggap elemen yang sama.
Implementasi Umum:
- HashSet: Urutan elemen tidak dijamin. Performa paling tinggi untuk operasi dasar (add, remove, contains).
- TreeSet: Menyimpan elemen dalam urutan terurut (sorted order).
- LinkedHashSet: Menyimpan elemen dalam urutan penyisipan (insertion order).
Contoh Kasus: Menemukan kata-kata unik dari sebuah kalimat.
Set<String> s = new HashSet<String>();for (String a : args) s.add(a); // Duplikat akan otomatis diabaikanSystem.out.println(s.size() + " distinct words: " + s);
List<E> Interface
Sebuah koleksi yang terurut (ordered) dan boleh mengandung elemen duplikat. Disebut juga sebagai sequence.
Karakteristik Utama: Pengguna memiliki kontrol penuh atas di mana setiap elemen disisipkan dan dapat mengakses elemen berdasarkan indeks posisinya (dimulai dari 0).
Operasi Spesifik List:
- Akses Posisi:E get(int index), E set(int index, E element).
- Pencarian:int indexOf(Object o), int lastIndexOf(Object o).
- Iterasi:ListIterator<E> listIterator().
Implementasi Umum:
- ArrayList: Implementasi berbasis array dinamis. Cepat untuk akses acak (get), lambat untuk penambahan/penghapusan di tengah.
- LinkedList: Implementasi berbasis doubly-linked list. Cepat untuk penambahan/penghapusan di awal/akhir/tengah, lambat untuk akses acak.
Contoh Kasus: Mengacak urutan elemen.
List<String> list = new ArrayList<String>();for (String a : args) list.add(a);Collections.shuffle(list, new Random()); // Mengacak urutanSystem.out.println(list);
Queue<E> Interface
Sebuah koleksi yang dirancang untuk menampung elemen sebelum diproses.
Karakteristik Utama: Biasanya mengikuti aturan FIFO (First-In, First-Out). Elemen yang pertama masuk adalah elemen yang pertama keluar.
Operasi Spesifik Queue:offer(E e) (menambah), poll() (mengambil dan menghapus kepala antrian), peek() (melihat kepala antrian tanpa menghapus).
Implementasi Umum:LinkedList (juga mengimplementasikan Queue), PriorityQueue (elemen diproses berdasarkan prioritas).
Contoh Kasus: Simulasi hitung mundur.
Queue<Integer> queue = new LinkedList<>();for (int i = 5; i >= 0; i--) queue.add(i);while (!queue.isEmpty()) { System.out.println(queue.remove()); // Akan mencetak 5, 4, 3, 2, 1, 0 Thread.sleep(1000);}
Deque<E> Interface
Singkatan dari Double-Ended Queue (diucapkan “deck”).
Karakteristik Utama: Mendukung penambahan dan penghapusan elemen dari kedua ujung, yaitu kepala (head) dan ekor (tail). Bisa digunakan sebagai Queue (FIFO) atau Stack (LIFO - Last-In, First-Out).
Contoh Kasus: Mengelola riwayat navigasi.
java Deque<String> deque = new LinkedList<>(); deque.addFirst("Halaman 1"); // Menambah di depan deque.addLast("Halaman 2"); // Menambah di belakang deque.push("Halaman 3"); // Menambah di depan (seperti stack) System.out.println(deque.pop()); // Mengambil dari depan, output: Halaman 3
Map<K, V> Interface
Sebuah objek yang memetakan kunci (keys) ke nilai (values).
Karakteristik Utama: Kunci harus unik. Setiap kunci hanya bisa memetakan ke satu nilai.
Operasi Dasar:V put(K key, V value), V get(Object key), V remove(Object key), boolean containsKey(Object key).
Map<String, Integer> m = new HashMap<>();for (String a : args) { Integer freq = m.get(a); m.put(a, (freq == null) ? 1 : freq + 1);}System.out.println(m);
Summary
Java Collection Framework adalah arsitektur komprehensif yang menyediakan interfaces generik seperti Set (elemen unik), List (elemen terurut dan boleh duplikat), Queue (antrian FIFO), dan Map (pasangan kunci-nilai unik) beserta implementasi konkretnya (HashSet, ArrayList, HashMap, dll.). Framework ini memungkinkan pengembang untuk memilih struktur data yang paling sesuai dengan kebutuhan aplikasi untuk manipulasi data yang efisien dan terstruktur.