hash tables in the constructor (lines - )we create three attributestable stores the array used for the hash tablecount indicates the number of keys currently stored in the tableand maxcount indicates the maximum number of keys that can be stored in the table before exceeding the load factor instead of using floatingpoint operations to determine if the load factor has been exceededwe can store the maximum number of keys needed to reach that point each time the table is expandeda new value of maxcount is computed for the initial table size of this value will be the key/value entries can be stored in the table using the same storage class mapentry as used in our earlier implementation but we also need way to flag an entry as having been previously used by key but has now been deleted the easiest way to do this is with the use of dummy mapentry object when key is deletedwe simply store an alias of the dummy object reference in the corresponding table entry for easier readability of the source codewe create two named constants in lines - to indicate the two special states for the table entriesan unused entrywhich is indicated by null referenceis one that has not yet been used to store keyand an empty entry is one that had previously stored key but has now been deleted the third possible state of an entrywhich is easily determined if the entry is not one of the other two statesis one that is currently occupied by key hash functions our implementation will need two hash functionsthe main function for mapping the key to home position and the function used with the double hashing for both functionswe are going to use the simple division method in which the key value is divided by the size of the table and the remainder becomes the index to which the key maps the division hash functions defined earlier in the assumed the search key is an integer value but the hashmap adt allows for the storage of any type of search keywhich includes stringsfloating-point valuesand even user-defined types to accommodate keys of various data typeswe can use python' built-in hash(functionwhich is automatically defined for all of the built-in types it hashes the given key and returns an integer value that can be used in the division method but the value returned by the python' hash(function can be any integernot just positive values or those within given range we can still use the function and simply take its absolute value and then divide it by the size of the table the main hash function for our implementation is defined ash(key|hash(key) while the second function for use with double hashing is defined ashp(key |hash(key)( the size of our hash table will always be an odd numberso we subtract from the size of the table in the second function to ensure the division is by an odd number the two hash functions are implemented in lines - of listing