Some hash table schemes, such as cuckoo hashing or dynamic perfect hashing, rely on the existence of universal hash functions and the ability to take a collection of data exhibi
Simplicity. Java allows class designers to provide their own hashCode
, which as you mention is good enough for "ordinary" hash tables, and can be hard enough to understand.
Besides, when the Java Collections API was designed, having generic hash tables in the standard library was bold enough a move already. C has never had them. C++ had them in the STL as hash_set
and hash_map
, but those didn't make it into the standard. Only now, in C++0x, are hash tables being considered for standardization again.
I think the normal hashCode
method was created without the "malicious inputs" case in mind. Also, as written by larsmann, its contract is much more easier to understand and implement than a universal hash function would be.
Here an idea about what to do: