Hash Map (di JavaScript: Object dan Map) menyimpan data sebagai pasangan key-value dengan pencarian super cepat.
Bagaimana cara kerjanya?
- Key diproses oleh hash function → menghasilkan angka (index)
- Value disimpan di index tersebut dalam array internal
- Saat mencari, hash function mengarahkan langsung ke lokasi — O(1)
Operasi dan kompleksitas:
| Operasi | Average | Worst Case |
|---|---|---|
| Get (pencarian) | O(1) | O(n) |
| Set (penyimpanan) | O(1) | O(n) |
| Delete | O(1) | O(n) |
| Has (cek ada) | O(1) | O(n) |
Apa itu collision? Collision terjadi saat dua key berbeda menghasilkan hash index yang sama — karena ruang hash (array internal) lebih kecil daripada kemungkinan key. Untuk mengatasinya, hash map memakai chaining (tiap bucket menyimpan linked list berisi semua entry yang bertabrakan) atau open addressing (cari bucket kosong berikutnya). Strategi ini menjaga performa tetap dekat O(1) di kondisi normal, tapi jika terlalu banyak collision — atau hash function buruk — performa bisa turun ke worst case O(n).
// JavaScript Map — hash map bawaan
const map = new Map();
map.set("nama", "Budi");
map.set("umur", 25);
map.set("kota", "Jakarta");
map.get("nama"); // "Budi" — O(1)
map.has("umur"); // true — O(1)
map.delete("kota"); // hapus — O(1)
map.size; // 2
// Iterasi
for (const [key, value] of map) {
console.log(`${key}: ${value}`);
}
Object vs Map di JavaScript:
| Fitur | Object | Map |
|---|---|---|
| Key type | String/Symbol | Apa saja |
| Urutan | Tidak dijamin | Sesuai insertion |
| Performa | Baik | Lebih baik untuk banyak operasi |
| Size | Manual count | .size property |
Kegunaan nyata:
- Counting — hitung frekuensi kata/karakter
- Caching — simpan hasil komputasi
- Lookup table — konversi kode ke nama
- De-duplication — deteksi duplikat O(n)
🎭 Analogi sehari-hari: Loker mall dengan barcode di tiket parkir. Scan barcode (key) → langsung tau loker mana (value). Gak perlu cek satu per satu loker. Walaupun ada 1000 loker, scan tetap instan — itu O(1). Kalau dua barcode kebetulan menghasilkan nomor loker yang sama? Petugas kasih loker sebelahnya yang kosong (collision handling).
💡 Mengapa Hash Map = "trik tercepat" di interview coding? Banyak masalah O(n²) (cari pasangan, cek duplikat, count) jadi O(n) hanya dengan Hash Map. Two Sum problem? Hash Map = O(n). Brute force = O(n²). Hash Map sering jadi shortcut performa di banyak algoritma.
⚠️ Jebakan umum:
- Object key selalu string —
obj[1]danobj["1"]sama. PakaiMapkalau butuh number/object sebagai key for...indi Object juga ngambil prototype — pakaiObject.keys()atauObject.entries()- Hash function buruk = banyak collision = degradasi ke O(n). Map bawaan JS aman, kalau implementasi sendiri hati-hati
- Iterasi Object urutan tidak terjamin untuk integer keys di beberapa engine — pakai Map kalau urutan penting
🎯 Object vs Map kapan?
- Object: struktur data ringan, key jelas string, butuh JSON serialize
- Map: key non-string, sering insert/delete, butuh
.size, urutan insertion penting
🧪 Tebakan cepat: Two Sum — cari 2 angka di array yang jumlahnya = target. Brute force O(n²). Dengan Hash Map? Loop sekali, simpan target - num yang dibutuhkan, cek apakah sudah pernah lihat = O(n).
TL;DR: Hash Map = key→value lookup O(1). Trik tercepat untuk count, dedup, lookup, dan banyak algoritma interview. Pakai Map di JS kalau butuh non-string keys.