RFR: 8178355: IdentityHashMap uses identity-based comparison for values everywhere except remove(K,V) and replace(K,V,V)
Stuart Marks
smarks at openjdk.java.net
Thu Apr 21 00:56:28 UTC 2022
On Fri, 15 Apr 2022 05:58:32 GMT, liach <duke at openjdk.java.net> wrote:
> Explicitly implement `remove` and `replace` in `IdentityHashMap` to compare values by identity. Updated API documentation of these two methods ([Preview](https://cr.openjdk.java.net/~liach/8178355/IdentityHashMap.html#remove(java.lang.Object,java.lang.Object))) to mention such behavior.
src/java.base/share/classes/java/util/IdentityHashMap.java line 1163:
> 1161: public boolean remove(Object o) {
> 1162: return o instanceof Entry<?, ?> entry
> 1163: && IdentityHashMap.this.remove(entry.getKey(), entry.getValue());
I would prefer to keep the internal `removeMapping` method and have other methods call it, instead of calling a public method. In particular the `EntrySet.remove()` method here should call an internal method to perform the actual removal instead of calling the public `remove()` method, since that potentially exposes the "self-use" to subclasses. The the public `remove()` method on IDHM could call `removeMapping`.
-------------
PR: https://git.openjdk.java.net/jdk/pull/8259
More information about the core-libs-dev
mailing list