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
#
HashMap
LinkedHashMap
TreeMap
Hashtable
ConcurrentHashMap
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
HashMap
tidak memiliki urutan tertentu. - Mengizinkan
null
:HashMap
mengizinkan satu kuncinull
dan beberapa nilainull
. - Performa Cepat: Operasi dasar (seperti
get
danput
) memiliki kompleksitas waktu rata-rata O(1).
Operasi Dasar #
-
Membuat
HashMap
Map<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
HashMap
int ukuran = hashMap.size();
-
Iterasi Melalui
HashMap
for (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
LinkedHashMap
adalah urutan di mana mereka ditambahkan. - Mengizinkan
null
: SepertiHashMap
,LinkedHashMap
mengizinkan satu kuncinull
dan beberapa nilainull
. - Lebih Lambat dari
HashMap
: Karena mempertahankan urutan,LinkedHashMap
sedikit 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
TreeMap
diurutkan berdasarkan kunci secara alami (natural order) atau berdasarkanComparator
yang ditentukan. - Tidak Mengizinkan
null
sebagai Kunci:TreeMap
tidak mengizinkannull
sebagai kunci. - Lebih Lambat dari
HashMap
: Operasi dasar memiliki kompleksitas waktu O(log n) karena penggunaan pohon.
Operasi Dasar #
-
Membuat
TreeMap
Map<String, Integer> treeMap = new TreeMap<>();
-
Menambahkan Pasangan Kunci-Nilai
treeMap.put("C", 3); treeMap.put("A", 1); treeMap.put("B", 2);
-
Iterasi Melalui
TreeMap
for (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
Hashtable
disinkronkan, sehingga aman digunakan dalam lingkungan multithreading. - Tidak Mengizinkan
null
:Hashtable
tidak mengizinkannull
sebagai kunci atau nilai. - Lebih Lambat dari
HashMap
: Karena penyinkronan,Hashtable
umumnya lebih lambat dibandingkanHashMap
.
Operasi Dasar #
-
Membuat
Hashtable
Map<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
:ConcurrentHashMap
tidak mengizinkannull
sebagai kunci atau nilai. - Lebih Efisien dalam Multithreading: Berkat segmentasi, operasi tidak memblokir seluruh map, sehingga memungkinkan paralelisme yang lebih tinggi.
Operasi Dasar #
-
Membuat
ConcurrentHashMap
Map<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 mengizinkannull
sebagai 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.