Re: Question about HashMap and Map.Entry ...
Andreas Leitgeb wrote:
Given a (Hash)Map<Long,Long> map and two Long values k and v,
Some task is to see if k is already in the map, and only if so,
then update the value in the map based on previous value and v.
Of course, that is trivial, and I've already implemented
it with containsKey(), get() and put().
It's just, that it seems to me that my piece of code
could be a bit *clearer*, if I could obtain the Map.Entry
for "k", and (if that isn't null) do getValue() and
setValue(...) on the Entry.
I dispute that that would be clearer. You'd be using part
of the inner and should-be-hidden machinery of the Map
to express what 'containsKey()' already directly and quite
clearly expresses.
Also, modifying an 'Entry' might be synonymous with, but
is not the same as "put the key and value in the Map",
which 'Map#put(K key, V value)" is.
What I'm missing, however, is:
How would I get the Entry for a given key?
(apart from scanning all through the entrySet())
A quick scan of the Javadocs for 'Map.Entry' says, sorry, no.
PS: using 1.6, but also interested in future (i.e. 1.7 or
Java 7 is not the future. It's the present. It's up to 7u7 already.
As of November 2012, a few short months away, Java 6 will be
the past.
even newer) prospects, and also in (any) explicit reasons
for *not* having some map.getEntry(K k).
Because 'Map' already has 'get(K k)'.
Also, such an Entry should be tied to the Map just like
those in the entrySet(). NavigableMap has methods that
return Entries with "snapshot"-semantics, which is *not*
what I'm looking for.
A quick scan of the Javadocs for 'Map.Entry' says, sorry, no.
"The only way to obtain a reference to a map entry is from the iterator
of this collection-view. These Map.Entry objects are valid only for the
duration of the iteration; more formally, the behavior of a map entry
is undefined if the backing map has been modified after the entry was
returned by the iterator, except through the setValue operation on the
map entry."
"V setValue(V value) ... (optional operation)."
--
Lew