RFR 8170733: HashMap.HashIterator.remove method does not use cached value for the hash code.
Aleksey Shipilev
shade at redhat.com
Mon Dec 5 20:14:34 UTC 2016
On 12/05/2016 09:12 PM, Paul Sandoz wrote:
> diff -r 5c9389804cbc src/java.base/share/classes/java/util/HashMap.java
> --- a/src/java.base/share/classes/java/util/HashMap.java Mon Dec 05 12:53:53 2016 +0530
> +++ b/src/java.base/share/classes/java/util/HashMap.java Mon Dec 05 12:10:46 2016 -0800
> @@ -1502,8 +1502,7 @@
> if (modCount != expectedModCount)
> throw new ConcurrentModificationException();
> current = null;
> - K key = p.key;
> - removeNode(hash(key), key, null, false, false);
> + removeNode(p.hash, p.key, null, false, false);
> expectedModCount = modCount;
> }
> }
> diff -r 5c9389804cbc src/java.base/share/classes/java/util/LinkedHashMap.java
> --- a/src/java.base/share/classes/java/util/LinkedHashMap.java Mon Dec 05 12:53:53 2016 +0530
> +++ b/src/java.base/share/classes/java/util/LinkedHashMap.java Mon Dec 05 12:10:46 2016 -0800
> @@ -731,8 +731,7 @@
> if (modCount != expectedModCount)
> throw new ConcurrentModificationException();
> current = null;
> - K key = p.key;
> - removeNode(hash(key), key, null, false, false);
> + removeNode(p.hash, p.key, null, false, false);
> expectedModCount = modCount;
> }
> }
>
D'oh. Looks good.
Thanks,
-Aleksey
More information about the core-libs-dev
mailing list