[9] Review request for 8140503: JavaFX "Pair" Hash Code Collisions
Vadim Pakhnushev
vadim.pakhnushev at oracle.com
Tue Nov 3 20:01:34 UTC 2015
Well, not exactly... Previously it was 13*hash(a) + hash(b) and now it's
31*(31 + hash(a)) + hash(b).
And apparently it improves the quality somehow. I did a test with 100^4
combinations and collision probability dropped by the factor of 3 from
0.065% to 0.022%.
Not really impressive, but still, and it uses well-defined utility method.
Yeah, I know it's not really a bug since you don't want to rely on the
hashCode at all...
Thanks,
Vadim
On 03.11.2015 22:35, Jim Graham wrote:
> All this does is change the prime constant used to produce the hash
> value.
>
> Objects.hash(a, b) uses 31*hash(a) + hash(b) instead of the 13*hash(a)
> + hash(b) that the embedded implementation uses.
>
> I don't really think this is a bug. The fact that Integer objects
> make it easy to reverse engineer and compute collisions of any
> reasonable hash combination computation don't mean that the technique
> has a bug, it just means that the submitter can read the code and
> think of a counter-example.
>
> If there are practical problems being caused for some particular and
> popular use case by the use of this particular constant "13", then we
> need to understand those issues and come up with a more comprehensive
> solution than to simply hand off to another mechanism which uses the
> same procedure with a different prime constant...
>
> ...jim
>
> On 11/3/15 3:06 AM, Vadim Pakhnushev wrote:
>> Hi Chien,
>>
>> Could you please review the fix:
>> https://bugs.openjdk.java.net/browse/JDK-8140503
>> http://cr.openjdk.java.net/~vadim/8140503/webrev.00/
>>
>> Thanks,
>> Vadim
More information about the openjfx-dev
mailing list