Problem
Implement a simplified hash table (hash map) data structure from scratch.
Required API
Design a class HashTable with:
-
HashTable(int numBuckets)
(constructor): initialize internal storage with a fixed number of buckets.
-
void put(K key, V value)
: insert a key/value pair. If the key already exists, overwrite its value.
-
V get(K key)
: return the value for
key
, or a sentinel (e.g.,
null
/
-1
) if the key is not present.
Note: delete/remove is not required.
Assumptions / Constraints
-
You may assume keys are non-null.
-
You must handle hash collisions correctly.
-
Target average time complexity:
O(1)
for
put
and
get
(amortized/expected).
-
You may not use a built-in hash map/dictionary.
Follow-up discussion (conceptual)
-
What makes a hash function “good,” and how does key distribution affect performance?
-
How does the choice of
numBuckets
(and the load factor) impact collisions and runtime?
-
Compare common collision-resolution strategies:
-
Separate chaining (buckets)
-
Open addressing (e.g., linear/quadratic probing, double hashing)
-
If using open addressing, describe how probing (“hopping”) works and what pitfalls it introduces (e.g., clustering, tombstones).