Map #
Dalam bahasa pemrograman Java, Map adalah antarmuka (interface) dalam koleksi framework yang menyimpan pasangan kunci (key) dan nilai (value). Tidak seperti List atau Set, Map tidak memperbolehkan kunci yang duplikat; setiap kunci hanya dapat berpasangan dengan satu nilai. Ada beberapa implementasi Map di Java, masing-masing dengan karakteristik dan penggunaan yang berbeda.
Jenis-jenis Map
#
HashMapLinkedHashMapTreeMapHashtableConcurrentHashMap
HashMap
#
HashMap adalah implementasi Map yang paling umum digunakan. HashMap menggunakan tabel hash untuk menyimpan pasangan kunci-nilai, sehingga memungkinkan pencarian dan penyimpanan yang cepat.
Karakteristik #
- Tidak Terurut: Elemen-elemen dalam
HashMaptidak memiliki urutan tertentu. - Mengizinkan
null:HashMapmengizinkan satu kuncinulldan beberapa nilainull. - Performa Cepat: Operasi dasar (seperti
getdanput) memiliki kompleksitas waktu rata-rata O(1).
Operasi Dasar #
-
Membuat
HashMapMap<String, Integer> hashMap = new HashMap<>(); -
Menambahkan Pasangan Kunci-Nilai
hashMap.put("A", 1); hashMap.put("B", 2); hashMap.put("C", 3); -
Mengakses Nilai Berdasarkan Kunci
int nilai = hashMap.get("A"); -
Menghapus Pasangan Kunci-Nilai Berdasarkan Kunci
hashMap.remove("B"); -
Memeriksa Apakah Kunci atau Nilai Ada
boolean adaKunci = hashMap.containsKey("C"); boolean adaNilai = hashMap.containsValue(3); -
Mendapatkan Ukuran
HashMapint ukuran = hashMap.size(); -
Iterasi Melalui
HashMapfor (Map.Entry<String, Integer> entry : hashMap.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); }
LinkedHashMap
#
LinkedHashMap adalah subclass dari HashMap yang mempertahankan urutan penyisipan. Ini berarti elemen-elemen akan dikembalikan dalam urutan di mana mereka dimasukkan ke dalam Map.
Karakteristik #
- Terurut Berdasarkan Penyisipan: Urutan elemen dalam
LinkedHashMapadalah urutan di mana mereka ditambahkan. - Mengizinkan
null: SepertiHashMap,LinkedHashMapmengizinkan satu kuncinulldan beberapa nilainull. - Lebih Lambat dari
HashMap: Karena mempertahankan urutan,LinkedHashMapsedikit lebih lambat daripadaHashMap.
Operasi Dasar #
Operasi pada LinkedHashMap sama seperti pada HashMap, tetapi dengan urutan elemen yang terjaga.
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("A", 1);
linkedHashMap.put("B", 2);
linkedHashMap.put("C", 3);
for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
Penjelasan: Output akan mempertahankan urutan penyisipan, misalnya: A: 1, B: 2, C: 3.
TreeMap
#
TreeMap adalah implementasi Map yang menggunakan struktur data pohon (biasanya Red-Black Tree). TreeMap secara otomatis mengurutkan elemen-elemen berdasarkan kunci mereka.
Karakteristik #
- Terurut: Elemen-elemen dalam
TreeMapdiurutkan berdasarkan kunci secara alami (natural order) atau berdasarkanComparatoryang ditentukan. - Tidak Mengizinkan
nullsebagai Kunci:TreeMaptidak mengizinkannullsebagai kunci. - Lebih Lambat dari
HashMap: Operasi dasar memiliki kompleksitas waktu O(log n) karena penggunaan pohon.
Operasi Dasar #
-
Membuat
TreeMapMap<String, Integer> treeMap = new TreeMap<>(); -
Menambahkan Pasangan Kunci-Nilai
treeMap.put("C", 3); treeMap.put("A", 1); treeMap.put("B", 2); -
Iterasi Melalui
TreeMapfor (Map.Entry<String, Integer> entry : treeMap.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); }
Penjelasan: Elemen-elemen dalam TreeMap akan diurutkan berdasarkan kunci, misalnya: A: 1, B: 2, C: 3.
Hashtable
#
Hashtable adalah implementasi Map lama yang bersifat thread-safe. Hashtable mirip dengan HashMap tetapi memiliki beberapa perbedaan penting.
Karakteristik #
- Thread-Safe: Semua metode dalam
Hashtabledisinkronkan, sehingga aman digunakan dalam lingkungan multithreading. - Tidak Mengizinkan
null:Hashtabletidak mengizinkannullsebagai kunci atau nilai. - Lebih Lambat dari
HashMap: Karena penyinkronan,Hashtableumumnya lebih lambat dibandingkanHashMap.
Operasi Dasar #
-
Membuat
HashtableMap<String, Integer> hashtable = new Hashtable<>(); -
Menambahkan Pasangan Kunci-Nilai
hashtable.put("A", 1); hashtable.put("B", 2); -
Mengakses Nilai Berdasarkan Kunci
int nilai = hashtable.get("A"); -
Menghapus Pasangan Kunci-Nilai Berdasarkan Kunci
hashtable.remove("B");
Penjelasan: Hashtable memberikan jaminan thread-safety dan tidak mengizinkan null, yang membuatnya berbeda dari HashMap.
ConcurrentHashMap
#
ConcurrentHashMap adalah implementasi thread-safe dari Map yang dirancang untuk digunakan dalam lingkungan multithreading. Tidak seperti Hashtable, ConcurrentHashMap tidak menyinkronkan seluruh koleksi pada setiap operasi, melainkan membagi map menjadi beberapa segmen untuk meningkatkan efisiensi.
Karakteristik #
- Thread-Safe: Dirancang khusus untuk kinerja tinggi dalam lingkungan multithreading.
- Tidak Mengizinkan
null:ConcurrentHashMaptidak mengizinkannullsebagai kunci atau nilai. - Lebih Efisien dalam Multithreading: Berkat segmentasi, operasi tidak memblokir seluruh map, sehingga memungkinkan paralelisme yang lebih tinggi.
Operasi Dasar #
-
Membuat
ConcurrentHashMapMap<String, Integer> concurrentMap = new ConcurrentHashMap<>(); -
Menambahkan Pasangan Kunci-Nilai
concurrentMap.put("A", 1); concurrentMap.put("B", 2); -
Mengakses Nilai Berdasarkan Kunci
int nilai = concurrentMap.get("A");
Penjelasan: ConcurrentHashMap sangat efisien dalam aplikasi yang membutuhkan operasi baca-tulis tinggi secara bersamaan.
Kesimpulan #
Dalam Java, Map adalah struktur data penting yang digunakan untuk menyimpan pasangan kunci-nilai. Berbagai implementasi Map memiliki karakteristik yang berbeda:
HashMap: Cepat dan tidak terurut, mengizinkannull.LinkedHashMap: Mempertahankan urutan penyisipan, mengizinkannull.TreeMap: Diurutkan secara alami atau berdasarkan comparator, tidak mengizinkannullsebagai kunci.Hashtable: Thread-safe tetapi lebih lambat, tidak mengizinkannull.ConcurrentHashMap: Thread-safe dan efisien dalam lingkungan multithreading, tidak mengizinkannull.
Dengan memahami karakteristik dan operasi dasar dari setiap jenis Map, Anda dapat memilih implementasi yang paling sesuai dengan kebutuhan spesifik aplikasi Anda.