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