What methods do you use for collision handling in hash tables?
sobes.tech AI
Answer from AI
Hash tables typically use two main methods for collision handling:
-
Chaining — when a collision occurs, all elements with the same hash are stored in a linked list or another container within a single array cell. Searching or inserting involves traversing this list.
-
Open Addressing — when a collision occurs, the next free cell is sought according to a certain sequence (linear probing, quadratic probing, double hashing).
In Go, the standard map implementation uses chaining with optimizations. For example, in case of a collision, elements are stored in linked lists within buckets.
An example of chaining (simplified):
// Structure for an element
struct entry {
key string
value int
next *entry
}
// Insertion with chaining
def insert(table []*entry, key string, value int) {
index := hash(key) % len(table)
e := &entry{key: key, value: value, next: table[index]}
table[index] = e
}
Thus, collision handling is a way to maintain correctness and efficiency of the hash table when hashes collide.