You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Stephen Colebourne <sc...@btopenworld.com> on 2004/04/01 02:20:32 UTC

Re: [collections] WeakIdentityMap

I've changed the implementation of ReferenceMap to extend AbstractHashedMap.
This may should improve the possibilities for subclassing. The next step is
to create a subclass IdentityReferenceMap where identity is used instead of
equals, as per IdentityMap vs HashedMap.

There are still differences between implementations, IIUC, as ReferenceMap
still uses an ordinary object for its map entry (due to not making HashEntry
an interface). Besides, I still don't grok all of the implementation anyway,
so I don't want to change it too much.

Stephen

----- Original Message -----
From: "Brian S O'Neill" <br...@earthlink.net>
> I've been maintaining an open source project for some time that I'd like
> to break up, and move the more useful components into other, more
> appropriate projects. The TeaTrove project
> (http://teatrove.sourceforge.net/) contains a few lonely collections
> classes, which I think fit quite nicely in the Jakarta Commons project.
>
> The first class I'd like to submit is named IdentityMap in TeaTrove,
> which is better named as WeakIdentityMap. This name change also resolve
> a name conflict. There are a few key differences between WeakIdentityMap
> and (commons) IdentityMap:
>
> First, keys are weakly referenced. If IdentityMap is being used only for
> key-value lookups, then swapping in a WeakIdentityMap will not change
> behavior. If the key object is gone, you can't look it up, so the entry
> might as well be garbage collected. WeakIdentityMap provides the
> behavior that WeakHashMap should, because it enforces the identity
> lookup that WeakHashMap merely encourages.
>
> Second, values are compared by the equals method, much like ordinary
> maps do. IdentityMap compares values by identity only. I'm not sure why
> this decision was made, but WeakIdentityMap can be modified to follow
> this behavior for the sake of consistency.
>
> I've also made a few changes to WeakIdentityMap from its original source
> in TeaTrove. It now supports null keys. Also, the TeaTrove version used
> to remove cleared entries even during accessor operations, which
> sometimes caused problems. WeakIdentityMap only removes cleared entries
> when calling put or remove.
>
> Although WeakIdentityMap is essentially a hashed map, I was not able to
> make it extend AbstractHashedMap. The put and remove operations need to
> perform special operations to detect and remove cleared entries, and the
> entry class has special methods and also extends WeakReference. The test
> case for WeakIdentityMap can probably extend the IdentityMap test case,
> but some minor changes are required in TestIdentityMap.
>
> Is it best for me to attach the WeakIdentityMap source(s) as an
> attachment and send it to the developers list or is there a better way
> to make submissions?
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-dev-help@jakarta.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org