a hash table implementation