Hashing Examples:

Java
Java
Python
Python
PHP
PHP
C#
C#

HashTable in Python


class HashNode:
   def __init__(self, key, value):
       self.key = key
       self.value = value
       self.next = None

class HashTable:
   def __init__(self, numBuckets = 16):
       self.buckets = [None] * numBuckets
       self.numBuckets = numBuckets
       self.size = 0

   def isEmpty(self):
       return self.size <= 0
   
   def _getHash(self, key):
        return hash(key) % self.numBuckets

   def put(self, key, value):
       bucket = self._getHash(key)
       newNode = HashNode(key, value)
       if self.buckets[bucket] is None:
           self.buckets[bucket] = newNode
       else:
           tmp = self.buckets[bucket]
           while tmp.next is not None:
               if tmp.key == key:
                   tmp.value = value
                   return
               tmp = tmp.next
           tmp.next = newNode
           self.size += 1
       return
   
   def get(self, key):
       bucket = self._getHash(key)
       tmp = self.buckets[bucket]
       while tmp is not None:
           if tmp.key == key:
               return tmp.value
           tmp = tmp.next
       return None

   def contains(self, key):
       bucket = self._getHash(key)
       tmp = self.buckets[bucket]
       while tmp is not None:
           if tmp.key == key:
               return True
           tmp = tmp.next
       return False

   def remove(self, key):
       bucket = self._getHash(key)
       if self.buckets[bucket] is  None:
           return
       tmp = self.buckets[bucket]
       if tmp.key == key:
           self.buckets[bucket] = self.buckets[bucket].next
           self.size -= 1
       while tmp.next is not None:
           if tmp.next.key == key:
               tmp.next = tmp.next.next
               self.size -= 1
               return
           tmp = tmp.next
   
   def clear(self):
       self.buckets = [None] * self.numBuckets
   
   def __str__(self):
       res = "{"
       count = 0
       for i in range(0, self.numBuckets):
           if self.buckets[i] is not None:
               tmp = self.buckets[i]
               while tmp is not None:
                   res += tmp.key + ": " + tmp.value
                   count += 1
                   if count < self.size:
                       res += ", "
                   tmp = tmp.next
       
       res += " }"
       return  res

Find any bugs in the code? let us know!