Khi thêm phần tử vào Hash Table, phần quan trọng nhất là giải quyết va chạm. Chúng ta sẽ dùng phương pháp chaining (xâu chuỗi). Có các thuật toán khác bạn có thể tham khảo tại: https://en.wikipedia.org/wiki/Hash_table#Collision_resolution
Hãy xem triển khai cụ thể. Chúng ta sẽ tạo một hàm hash chỉ hoạt động trên số nguyên để đơn giản. Nhưng thuật toán phức tạp hơn có thể dùng để hash mọi đối tượng:
Ví dụ
put(key, value) {
let hashCode = hash(key);
for(let i = 0; i < this.container[hashCode].length; i++) {
// Thay thế giá trị hiện tại bằng khóa cho trước
// nếu nó đã tồn tại
if(this.container[hashCode][i].key === key) {
this.container[hashCode][i].value = value;
return;
}
}
// Thêm cặp vào cuối mảng
this.container[hashCode].push(new this.KVPair(key, value));
}
Bạn có thể kiểm tra bằng cách sau:
Ví dụ
let ht = new HashTable(); ht.put(10, 94); ht.put(20, 72); ht.put(30, 1); ht.put(21, 6); ht.put(15, 21); ht.put(32, 34); ht.display();
Kết quả
Điều này sẽ cho ra kết quả:
0: 1: 2: 3: 4: { 15: 21 } 5: 6: 7: 8: { 30: 1 } 9: { 20: 72 } 10: { 10: 94 } -->{ 21: 6 } -->{ 32: 34 }