No, this isn't an issue of over thinking the problem at all. The problem has been solved by both of us n fairly simple and straight forward manners.
The last few exchanges between us has been about the proper naming of data structures. You seem to insist that the data structure you used is a hash table, which it is not. In terms of over thinking what a hash table is, thats nonsense.
This last argument of yours is like saying "AVL Tree: Theres no 2 child elements per node? no rebalancing on arbitrary depth? doesn't rebalance by doing right and left shifts depending on the current depth pattern? ... You're over thinking the problem" No it's not over thinking the problem because _thats what an AVL tree is_.
And it's also like saying "Bloom Filter: isn't all in memory? doesn't use a bit array as a truth table? isn't a probabilistic datastructure? ..... You're over thinking the problem" Once again thats not over thinking anything, thats simply what a bloom filter is.
Much to the same degree in which a hash table by definition transforms keys, must consider hash collision and manage buckets.

