Re:String.hashCode() is plenty unique
by zokier on Saturday August 11, 2018 @07:07AM
(#17739221)
Perfect hash functions guarantee no collisions. Of course they have other limitations, so you have to pick some tradeoffs.
[ Parent
| on HN ]
I'm pretty sure, as the parent mentioned, that theoretic collisionness is impossible with |input-domaim| > |output-domain| bc of the pigeonhole principle. Especially so when input has no maximum size.
However perfect it is, it can only guarantee no collisions if the size of the strings you're hashing is equal or lower than the hash size.
In this house, we obey the pigeonhole principle.
It can do better, if the input is not "every possible string." A perfect hash of the strings representing 32-bit unsigned integers can compress strings up to 10 bytes long into 4 bytes of data.