Published on

Data Structures & Algorithms: How to create a Hash Table?

Authors
  • avatar
    Name
    Loi Tran
    Twitter
class HashTable:
    def __init__(self, size=10):
        self.size = size
        self.table = [[] for _ in range(self.size)]

    def _hash(self, key):
        val = sum(ord(char) for char in str(key)) % self.size
        print(val)
        return val

    def insert(self, key, value):
        index = self._hash(key)
        bucket = self.table[index]
        for i, (k, v) in enumerate(bucket):
            if k == key:
                bucket[i] = (key, value)
                return
        bucket.append((key, value))

    def get(self, key):
        index = self._hash(key)
        bucket = self.table[index]
        for k, v in bucket:
            if k == key:
                return v
        return None

    def remove(self, key):
        index = self._hash(key)
        bucket = self.table[index]

        for i, (k, v) in enumerate(bucket):
            if k == key:
                bucket.pop(i)
                return True
        return False

    def resize(self):
        new_size = self.size * 2
        new_table = [[] for _ in range(new_size)]
        for bucket in self.table:
            for k, v in bucket:
                index = hash(k) % new_size
                new_table[index].append((k, v))

        self.table = new_table
        self.size = new_size

    def __str__(self):
        return str(self.table)

ht = HashTable()
ht.insert("name", "Alice")
ht.insert("age", 25)
ht.insert("city", "Wonderland")

print(ht.get("name"))
print(ht.get("age"))

ht.remove("age")
print(ht.get("age"))
print(ht)