Menguasai Koleksi Java: Panduan Lengkap Struktur Data Efisien
Sebelum Java 2, Java menyediakan kelas ad hoc seperti Dictionary, Vector, Stack, dan Properties untuk menyimpan dan memanipulasi sekelompok objek. Meskipun kelas ini cukup berguna, mereka kurang memiliki tema terpadu yang sentral. Oleh karena itu, cara Anda menggunakan Vector berbeda dari cara Anda menggunakan Properties.
Framework koleksi dirancang untuk memenuhi beberapa tujuan, seperti:
Framework harus berkinerja tinggi. Implementasi untuk koleksi dasar (array dinamis, daftar terhubung, pohon, dan tabel hash) harus sangat efisien.
Framework harus memungkinkan berbagai tipe koleksi untuk bekerja dengan cara yang sama dan dengan tingkat interoperabilitas yang tinggi.
Framework harus dapat diperluas dan/atau disesuaikan koleksi dengan mudah.
Untuk tujuan ini, seluruh framework koleksi dirancang sekitar seperangkat antarmuka standar. Beberapa implementasi standar seperti LinkedList, HashSet, dan TreeSet, dari antarmuka ini disediakan yang dapat Anda gunakan sebagaimana adanya dan Anda juga dapat mengimplementasikan koleksi Anda sendiri, jika Anda memilih.
Framework koleksi adalah arsitektur terpadu untuk mewakili dan memanipulasi koleksi. Semua framework koleksi mencakup hal berikut:
Antarmuka – Ini adalah tipe data abstrak yang mewakili koleksi. Antarmuka memungkinkan koleksi untuk dimanipulasi secara independen dari detail representasinya. Dalam bahasa berorientasi objek, antarmuka umumnya membentuk hierarki.
Implementasi, yaitu Kelas – Ini adalah implementasi konkret dari antarmuka koleksi. Pada dasarnya, mereka adalah struktur data yang dapat digunakan kembali.
Algoritma – Ini adalah metode yang melakukan komputasi berguna, seperti pencarian dan pengurutan, pada objek yang mengimplementasikan antarmuka koleksi. Algoritma dikatakan polimorfik: yaitu, metode yang sama dapat digunakan pada banyak implementasi yang berbeda dari antarmuka koleksi yang sesuai.
Selain koleksi, framework mendefinisikan beberapa antarmuka dan kelas peta. Peta menyimpan pasangan kunci/nilai. Meskipun peta bukan koleksi dalam penggunaan yang tepat dari istilah, namun mereka sepenuhnya terintegrasi dengan koleksi.
Antarmuka Koleksi
Framework koleksi mendefinisikan beberapa antarmuka. Bagian ini memberikan gambaran umum setiap antarmuka:
| Sr.No. | Antarmuka & Deskripsi |
| 1 | The Collection Interface Ini memungkinkan Anda bekerja dengan sekelompok objek; ini berada di puncak hierarki koleksi. |
| 2 | The List Interface Ini memperluas Collection dan instance List menyimpan koleksi terurut elemen. |
| 3 | The Set Ini memperluas Collection untuk menangani himpunan, yang harus berisi elemen unik. |
| 4 | The SortedSet Ini memperluas Set untuk menangani himpunan terurut. |
| 5 | The Map Ini memetakan kunci unik ke nilai. |
| 6 | The Map.Entry Ini menggambarkan elemen (pasangan kunci/nilai) dalam peta. Ini adalah kelas dalam dari Map. |
| 7 | The SortedMap Ini memperluas Map sehingga kunci dipertahankan dalam urutan menaik. |
| 8 | The Enumeration Ini adalah antarmuka lama yang mendefinisikan metode untuk menghitung (mendapatkan satu per satu) elemen dalam sekelompok objek. Antarmuka lama ini telah digantikan oleh Iterator. |
Kelas Koleksi
Java menyediakan seperangkat kelas koleksi standar yang mengimplementasikan antarmuka Koleksi. Beberapa kelas menyediakan implementasi lengkap yang dapat digunakan sebagaimana adanya dan yang lain adalah kelas abstrak, yang menyediakan implementasi kerangka yang digunakan sebagai titik awal untuk membuat koleksi konkret.
Kelas koleksi standar diringkas dalam tabel berikut:
| Sr.No. | Kelas & Deskripsi |
| 1 | AbstractCollection Mengimplementasikan sebagian besar antarmuka Collection. |
| 2 | AbstractList Memperluas AbstractCollection dan mengimplementasikan sebagian besar antarmuka List. |
| 3 | AbstractSequentialList Memperluas AbstractList untuk digunakan oleh koleksi yang menggunakan akses berurutan daripada akses acak elemennya. |
| 4 | LinkedList Mengimplementasikan daftar terhubung dengan memperluas AbstractSequentialList. |
| 5 | ArrayList Mengimplementasikan array dinamis dengan memperluas AbstractList. |
| 6 | AbstractSet Memperluas AbstractCollection dan mengimplementasikan sebagian besar antarmuka Set. |
| 7 | HashSet Memperluas AbstractSet untuk digunakan dengan tabel hash. |
| 8 | LinkedHashSet Memperluas HashSet untuk memungkinkan iterasi urutan penyisipan. |
| 9 | TreeSet Mengimplementasikan himpunan yang disimpan dalam pohon. Memperluas AbstractSet. |
| 10 | AbstractMap Mengimplementasikan sebagian besar antarmuka Map. |
| 11 | HashMap Memperluas AbstractMap untuk menggunakan tabel hash. |
| 12 | TreeMap Memperluas AbstractMap untuk menggunakan pohon. |
| 13 | WeakHashMap Memperluas AbstractMap untuk menggunakan tabel hash dengan kunci lemah. |
| 14 | LinkedHashMap Memperluas HashMap untuk memungkinkan iterasi urutan penyisipan. |
| 15 | IdentityHashMap Memperluas AbstractMap dan menggunakan kesetaraan referensi saat membandingkan dokumen. |
Kelas AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList dan AbstractMap menyediakan implementasi kerangka dari antarmuka koleksi inti, untuk meminimalkan upaya yang diperlukan untuk mengimplementasikannya.
Beberapa kelas lama yang didefinisikan oleh java.util telah dibahas di bab sebelumnya:
| Sr.No. | Kelas & Deskripsi |
| 1 | Vector Ini mengimplementasikan array dinamis. Mirip dengan ArrayList, tetapi dengan beberapa perbedaan. |
| 2 | Stack Stack adalah subclass dari Vector yang mengimplementasikan tumpukan standar last-in, first-out. |
| 3 | Dictionary Dictionary adalah kelas abstrak yang mewakili repositori penyimpanan kunci/nilai dan beroperasi hampir seperti Map. |
| 4 | Hashtable Hashtable adalah bagian dari java.util asli dan adalah implementasi konkret dari Dictionary. |
| 5 | Properties Properties adalah subclass dari Hashtable. Digunakan untuk memelihara daftar nilai di mana kunci adalah String dan nilai juga String. |
| 6 | BitSet Kelas BitSet membuat jenis array khusus yang menyimpan nilai bit. Array ini dapat bertambah ukurannya sesuai kebutuhan. |
Algoritma Koleksi
Framework koleksi mendefinisikan beberapa algoritma yang dapat diterapkan pada koleksi dan peta. Algoritma ini didefinisikan sebagai metode statis dalam kelas Collections.
Beberapa metode dapat melempar ClassCastException, yang terjadi saat upaya membandingkan tipe yang tidak kompatibel, atau UnsupportedOperationException, yang terjadi saat upaya memodifikasi koleksi yang tidak dapat dimodifikasi.
Collections mendefinisikan tiga variabel statis: EMPTY_SET, EMPTY_LIST, dan EMPTY_MAP. Semua tidak dapat diubah.
| Sr.No. | Algoritma & Deskripsi |
| 1 | The Collection Algorithms Berikut adalah daftar semua implementasi algoritma. |
Cara Menggunakan Iterator ?
Seringkali, Anda ingin melalui elemen dalam koleksi. Misalnya, Anda mungkin ingin menampilkan setiap elemen.
Cara termudah untuk melakukannya adalah dengan menggunakan iterator, yang merupakan objek yang mengimplementasikan antarmuka Iterator atau ListIterator.
Iterator memungkinkan Anda melalui koleksi, mendapatkan atau menghapus elemen. ListIterator memperluas Iterator untuk memungkinkan traversal dua arah dari daftar dan modifikasi elemen.
| Sr.No. | Metode Iterator & Deskripsi |
| 1 | Using Java Iterator Berikut adalah daftar semua metode dengan contoh yang disediakan oleh antarmuka Iterator dan ListIterator. |
Cara Menggunakan Comparator ?
Kedua TreeSet dan TreeMap menyimpan elemen dalam urutan terurut. Namun, komparator yang menentukan secara tepat apa artinya urutan terurut.
Antarmuka ini memungkinkan kita mengurutkan koleksi tertentu dalam berbagai cara yang berbeda. Juga antarmuka ini dapat digunakan untuk mengurutkan instance kelas apa pun (bahkan kelas yang tidak dapat kita modifikasi).
| Sr.No. | Metode Iterator & Deskripsi |
| 1 | Using Java Comparator Berikut adalah daftar semua metode dengan contoh yang disediakan oleh antarmuka Comparator. |
Ringkasan
Framework Koleksi Java memberikan programmer akses ke struktur data siap pakai serta algoritma untuk memanipulasinya.
Koleksi adalah objek yang dapat menahan referensi ke objek lain. Antarmuka koleksi mendeklarasikan operasi yang dapat dilakukan pada setiap tipe koleksi.
Kelas dan antarmuka framework koleksi berada dalam paket java.util.