Wasn't an early version really broken - where it only looked at the first N characters of a string when hashing it? Where N was actually pretty low.
Perhaps, but it made sense with 16MB RAM and 486 CPU. Current implementation uses 31 multiplier which is useless over 1M entries. This problem is also in Arrays.hash*() and many other places.