RFR: 8029795 : LinkedHashMap.getOrDefault() doesn't update access order. (was Why doesn't new Map methods generate entry accesses on LinkedHashMap?)
Vitaly Davidovich
vitalyd at gmail.com
Mon Dec 9 23:22:46 PST 2013
Mike,
Would it make sense to rewrite get() in terms of getOrDefault() to reduce
duplication?
Thanks
Sent from my phone
On Dec 9, 2013 10:40 PM, "Mike Duigou" <mike.duigou at oracle.com> wrote:
> Hello all;
>
> I've posted a webrev for review which corrects the problem and adds
> appropriate tests.
>
> http://cr.openjdk.java.net/~mduigou/JDK-8029795/0/webrev/
>
> I also updated the documentation to mention that getOrDefault as well as
> the replace methods generate access events.
>
> Mike
>
> On Dec 9 2013, at 02:11 , Paul Sandoz <paul.sandoz at oracle.com> wrote:
>
> > Hi Roman,
> >
> > On Dec 8, 2013, at 10:29 PM, Roman Leventov <leventov at ya.ru> wrote:
> >> Especially getDefault(). Doesn't this violate principle of least
> astonishment? Details and proof:
> http://stackoverflow.com/questions/20440136/why-doesnt-new-map-methods-generate-entry-accesses-on-linkedhashmap
> >>
> >
> > Thanks. I believe that all the new (default) Map methods but
> getOrDefault behave correctly. So i think it is a bug, we need to add
> something like the following to LinkedHashMap:
> >
> > public V getOrDefault(Object key, V defaultValue) {
> > Node<K,V> e;
> > if ((e = getNode(hash(key), key)) == null)
> > return defaultValue;
> > if (accessOrder)
> > afterNodeAccess(e);
> > return e.value;
> > }
> >
> > and also update the documentation to clarify (via the implementation
> specification of the default methods it can be inferred what the behaviour
> is, but that ain't obvious).
> >
> > I have logged this bug:
> >
> > https://bugs.openjdk.java.net/browse/JDK-8029795
> >
> > Paul.
> >
> >
> >
>
>
More information about the jdk8-dev
mailing list