Re: WeakHashMap for values
- From: Hendrik Maryns <hendrik_maryns@xxxxxxxxxxxxx>
- Date: Thu, 08 Jun 2006 18:40:40 +0200
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Rogan Dawes schreef:
Hendrik Maryns wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi,
I need something like WeakHashMap, but with the inverse function: I want
the values to be weakly referenced to, and the entry to be discarded
from the map once the value no longer exists. Is there a standard
implementation for this?
But maybe, as happens often, I am saying: I want X, whereas actually I
want Y, but think I need X to achieve it. So here is my real problem:
I have some small wrapper objects, whose identity is determined by the
array of some other objects they contain. I want to avoid unnecessary
implementations of those wrappers, so I wanted to write a factory
method. The first idea is to have a Map mapping lists to objects
(arrays do not give good hash codes, so I convert them with
Arrays.asList first). Now, the whole idea is to save memory, so I don’t
want this map to get unnecessarily big. The idea is: using weak
references I can have it clean up itself. But WeakHashMap does just the
inverse: it weakly wraps the key, not the value. And using the
suggestion in the javadoc will not work too, I think: I can wrap the
values myself, but the keys are lists made on the fly, so the weak hash
map will throw those entries away too soon!
One solution I see, is to use an ordinary HashMap, wrap the values in
weak references, and do some cleanup in the map from time to time. But
I am not sure how I should implement ‘from time to time’, then.
Suggestions welcome!
Depending on the size of your HashMap, you could do it whenever someone
gets or puts a value.
e.g. if they do
map.get(foo), and the value referenced by foo has gone away, simply
return null, and remove the entry for foo from the map.
e.g. (typed in my mail client, and not carefully checked)
public class WeakValueHashMap extends HashMap {
Thanks for the code, though I wouldn’t have it extend HashMap, as it
breaks some contracts.
However, I found
http://jakarta.apache.org/commons/collections/apidocs/org/apache/commons/collections/map/ReferenceMap.html,
and decided to use this first. But I keep your suggestions in mind,
thanks both!
H.
- --
Hendrik Maryns
==================
http://aouw.org
Ask smart questions, get good answers:
http://www.catb.org/~esr/faqs/smart-questions.html
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
iD8DBQFEiFMIe+7xMGD3itQRAiXLAJ9bRsFzfGEF124rBlxZWJiTDC76AQCfbsp2
pNB0623bHro89vszju1DQ/o=
=3tsL
-----END PGP SIGNATURE-----
.
- References:
- WeakHashMap for values
- From: Hendrik Maryns
- Re: WeakHashMap for values
- From: Rogan Dawes
- WeakHashMap for values
- Prev by Date: Re: about tomcat context
- Next by Date: Re: get request parameters are not in order
- Previous by thread: Re: WeakHashMap for values
- Next by thread: Re: WeakHashMap for values
- Index(es):
Relevant Pages
|