Bug(s) inside IdentityHashMap.java
Tom Tromey
tromey@redhat.com
Thu Sep 27 08:05:00 GMT 2001
>>>>> "Martin" == Martin Kahlert <martin.kahlert@infineon.com> writes:
Martin> I have some problems with IdentityHashMap.java:
Martin> First: Where is table.length set?
`table' is an array. `table.length' is set when the array is created.
Martin> The file contains a lot of copies of the term
Martin> h = Math.abs (2 * System.identityHashCode (key) % table.length);
Martin> this is the same as
Martin> h = Math.abs ((2 * System.identityHashCode (key)) % table.length);
Martin> thus, h may be table.length - 1;
Martin> but in get() we ask for return table[h + 1];
Martin> which is an memory violation.
Of course. Sorry about this. I'll write a test suite for
IdentityHashMap soon -- something I should have done on day 1.
Meanwhile I think we really need:
h = Math.abs (2 * (System.identityHashCode (key) % (table.length / 2)));
Conceptually table is an array of length L where each entry is a
key/value pair. We want to compute the index based on the conceptual
length, and then double that.
Tom
More information about the Java
mailing list