Menu
CoddyTech

Hash Map

Terakhir diperbarui

Hash map adalah struktur data yang menyimpan pasangan key-value dan memungkinkanmu mencari sebuah nilai berdasarkan key-nya dalam O(1) secara rata-rata. Cara kerjanya persis seperti hash table, tetapi setiap entri di bucket membawa key sekaligus nilai yang terkait dengannya. Untuk menyimpan atau mengambil sebuah pasangan, key di-hash menjadi indeks bucket, lalu rantai di bucket itu dipindai untuk mencari key yang cocok. Tekan Putar di atas untuk melihat pasangan ditempatkan ke bucket hasil hash dan sebuah nilai diambil berdasarkan key-nya.

Inilah struktur di balik dict di Python, HashMap di Java, dan Map/objek di JavaScript. Tabrakan (collision) ditangani dengan cara yang sama seperti pada hash table, di sini dengan separate chaining, jadi performanya bergantung pada fungsi hash yang bagus dan load factor yang rendah.

Kompleksitas waktu

OperasiRata-rataKasus terburuk
Put (sisipkan/perbarui)O(1)O(n)
Get (cari)O(1)O(n)
HapusO(1)O(n)
RuangO(n)O(n)

Hash map di bahasa populer

BahasaTipe
Pythondict
JavaHashMap
JavaScriptMap / objek
C++std::unordered_map
Gomap

Contoh penerapan

Menyisipkan pasangan ("cat", 3), ("dog", 5), ("cat", 9), ("emu", 7) ke map dengan 8 bucket, memakai hash(key) % 8. Anggap hash("cat") % 8 = 2, hash("dog") % 8 = 5, hash("emu") % 8 = 2:

LangkahStrukturAksi
Put ("cat", 3)bucket 2: [("cat", 3)]Hash ke bucket 2; rantainya kosong, jadi tambahkan pasangannya.
Put ("dog", 5)bucket 2: [("cat", 3)], bucket 5: [("dog", 5)]Hash ke bucket 5; rantainya kosong, jadi tambahkan pasangannya.
Put ("cat", 9)bucket 2: [("cat", 9)], bucket 5: [("dog", 5)]Hash ke bucket 2; key "cat" sudah ada di rantai, jadi perbarui nilainya menjadi 9.
Put ("emu", 7)bucket 2: [("cat", 9), ("emu", 7)], bucket 5: [("dog", 5)]Hash ke bucket 2; bertabrakan dengan "cat", key tidak ditemukan, jadi tambahkan pasangannya.
Get "emu"bucket 2: [("cat", 9), ("emu", 7)]Hash ke bucket 2; pindai rantainya, lewati "cat", cocokkan "emu", kembalikan 7.

Kapan memakai hash map

Pakai saatHindari saat
Kamu butuh pencarian, penyisipan, dan penghapusan rata-rata O(1) berdasarkan key yang persis.Kamu butuh key yang tetap terurut atau range query: pakai BST yang seimbang atau sorted map.
Key-nya bisa di-hash dan kesamaannya terdefinisi dengan jelas (string, int, tuple).Key-nya mutable dan bisa berubah setelah disisipkan, sehingga merusak bucket-nya.
Kamu sedang menghitung, menghapus duplikat, membuat cache, atau mengindeks berdasarkan sebuah ID.Kamu butuh jaminan kasus terburuk O(log n), bukan batas rata-rata teramortisasi.
Urutan iterasi tidak penting, atau map yang mempertahankan urutan penyisipan sudah cukup.Memori sangat terbatas: bucket, ruang cadangan untuk load factor, dan pointer menambah beban.

Kode Hash Map

Implementasi Hash Map yang rapi dan siap dijalankan dalam Python, JavaScript, Java, C++, C. Pilih bahasa, salin kodenya, atau buka langsung di Coddy Playground.

Kode Hash Map dalam Python

Python
1# Python's built-in dict is a hash map: O(1) average2# insert, lookup, and delete.3inventory = {"apple": 3, "banana": 7}4
5# Insert and update6inventory["cherry"] = 57inventory["apple"] += 28
9# Lookup, with .get for a safe default on missing keys10print("apple: ", inventory["apple"])11print("mango: ", inventory.get("mango", 0))12
13# Membership test and delete14print("banana in stock:", "banana" in inventory)15del inventory["banana"]16print("banana in stock:", "banana" in inventory)17
18# Iterate over key-value pairs19for fruit, count in sorted(inventory.items()):20    print(f"{fruit}: {count}")21
22# Classic hash map use case: counting frequencies23words = "the quick brown fox jumps over the lazy dog the end".split()24freq = {}25for word in words:26    freq[word] = freq.get(word, 0) + 127
28print("Occurrences of the:", freq["the"])29print("Most common word:  ", max(freq, key=freq.get))
Jalankan kode ini di Playground Python

FAQ Hash Map

Apa perbedaan hash map dan hash table?

Pada dasarnya keduanya adalah struktur yang sama: array berisi bucket yang dialamatkan lewat hash dari key. Dalam pemakaian sehari-hari, "hash table" sering merujuk ke himpunan key atau teknik umumnya, sedangkan "hash map" menekankan penyimpanan pasangan key-value. Beberapa bahasa juga membedakan keduanya dari sisi thread safety (misalnya Hashtable vs HashMap di Java), tetapi algoritma intinya sama.

Berapa kompleksitas waktu hash map?
Put, get, dan hapus bernilai O(1) secara rata-rata dengan fungsi hash yang bagus dan load factor yang rendah. Pada kasus patologis ketika semua key bertabrakan di satu bucket, semuanya merosot menjadi O(n), itulah sebabnya resize dan hashing yang bagus itu penting.
Bagaimana hash map menangani dua key yang di-hash ke bucket yang sama?

Hash map menyelesaikan tabrakan itu. Visualisasi ini memakai separate chaining: setiap bucket menyimpan list kecil, dan pasangan baru yang key-nya di-hash ke sana ditambahkan ke list itu. Saat pencarian, map memindai rantai pendek itu untuk mencari key yang cocok. Teknik alternatifnya adalah open addressing, yang mencari slot lain di dalam array.

Hash map vs binary search tree: mana yang sebaiknya dipakai?
Pakai hash map saat kamu hanya butuh pencarian berdasarkan key yang persis dan ingin operasi rata-rata O(1). Pakai binary search tree yang seimbang (seperti TreeMap atau std::map) saat kamu butuh key yang terurut, range query, atau pencarian predecessor/successor, yang berbiaya O(log n). BST mengorbankan sedikit kecepatan demi jaminan urutan yang tidak bisa diberikan hash map.
Apa itu load factor dan mengapa memicu resize?
Load factor adalah rasio antara jumlah entri yang disimpan dan jumlah bucket. Saat nilainya naik, rantai makin panjang dan pencarian rata-rata melambat, jadi sebagian besar implementasi melakukan resize (biasanya menggandakan bucket dan meng-hash ulang semuanya) begitu nilainya melewati ambang seperti 0.75. Resize bernilai O(n) tetapi jarang terjadi, jadi biayanya teramortisasi dan operasi rata-rata tetap O(1).
Bisakah objek mutable seperti list dipakai sebagai key hash map?
Biasanya tidak. Key harus bisa di-hash dan hash-nya harus tetap selama key itu ada di dalam map. Contohnya, Python memunculkan TypeError: unhashable type untuk list. Jika kamu mengubah key setelah menyisipkannya, hash-nya berubah dan map tidak bisa lagi menemukannya di bucket yang benar, sehingga entri itu hilang tanpa peringatan. Pakai key yang immutable seperti string, angka, atau tuple.
Ilustrasi bahasa pemrograman di Coddy

Kuasai algoritma bersama Coddy

Mulai