It seems like you may be looking for a bimap.
The Google Collections (now a part of Guava) contains an
BiMap interface with a few implementations.
A bimap (or “bidirectional map”) is a
map that preserves the uniqueness of
its values as well as that of its
keys. This constraint enables bimaps
to support an “inverse view”, which is
another bimap containing the same
entries as this bimap but with
reversed keys and values.
BiMap.inverse method appears to return a
Map with the values as the keys, and the keys as the values, so that
Map can be used to call
get on the value and retrieve a key.
In addition the
Map returned by
inverse is a view of the underlying data, so it does not have to make extra copies of the original data.
BiMap.inverse method documentation:
Returns the inverse view of this
bimap, which maps each of this bimap’s
values to its associated key. The two
bimaps are backed by the same data;
any changes to one will appear in the