On 05/27/13 04:57, Alan Bateman wrote:

Any objection if we move ahead with what Brent has now, at least as first step?
There are are other follow-on changes, the removal of String hash32 field/method
particular, that we are anxious to get in.


Yes, please do.

In which case, here's a problem that needs fixing in the current
version:

The splitTreeBin method can only handle doubling of tables.
But it is possible from current HashMap.putAll to skip a doubling
step. This almost never happens in practice, but must be
avoided by replacing (HashMap.java, approx line 700):

        if (numKeysToBeAdded > threshold) {
            int targetCapacity = (int)(numKeysToBeAdded / loadFactor + 1);
            if (targetCapacity > MAXIMUM_CAPACITY)
                targetCapacity = MAXIMUM_CAPACITY;
            int newCapacity = table.length;
            while (newCapacity < targetCapacity)
                newCapacity <<= 1;
            if (newCapacity > table.length)
                resize(newCapacity);
            }
with:

         if (numKeysToBeAdded > threshold && table.length < MAXIMUM_CAPACITY)
             resize(table.length * 2);



Reply via email to