TreeMap.navigableKeySet().descendingIterator() sequence ?
Alan Bateman
Alan.Bateman at Sun.COM
Sun Apr 20 10:07:36 UTC 2008
Joshua Bloch wrote:
>
> Folks,
>
> While we're at it, here's another Collections bug discovered recently
> by a Googler (Scott Blum). The value of this expression should be false:
>
> new IdentityHashMap().containsValue(null)
>
> Unfortunately, it's true. Looking at the code for containsValue, it's
> obvious what's wrong:
>
> /**
> * Tests whether the specified object reference is a value in this
> identity
> * hash map.
> *
> * @param value value whose presence in this map is to be tested
> * @return <tt>true</tt> if this map maps one or more keys to the
> * specified object reference
> * @see #containsKey(Object)
> */
> public boolean containsValue(Object value) {
> Object[] tab = table;
> for (int i = 1; i < tab.length; i+= 2)
> if (tab[i] == value)
> return true;
>
> return false;
> }
>
> Empty entries are masquerading as entries mapping to null. The fix is
> easy:
>
> if (tab[i] == value)
>
> becomes:
>
> if (tab[i] == value && tab[i -1] != null)
>
> (Recall that the null key (but not value) is proxied by NULL_KEY.)
>
> Josh
>
I don't see this in the bug database so I've created the following so
that it doesn't get lost:
6691215: (coll) IdentityHashMap.containsValue(null) returns true when
null value not present
-Alan.
More information about the core-libs-dev
mailing list