commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From __matthewHawthorne <ma...@phreaker.net>
Subject Re: [collections] BidiMap / DoubleOrderedMap
Date Sat, 20 Sep 2003 17:57:39 GMT
In BidiMap, instead of:
	
	> Object getKeyForValue(Object value)
	> Object removeValue(Object value)
	> Set entrySetByValue()
	> Set keySetByValue()
	> Collection valuesByValue()

What about just providing a single method which would return a Map with 
the keys/values reversed, such as:

	Map valueMap()

It would remove the duplication of having to write all these XXXbyValue 
methods.


Similarly, in SortedBidiMap, instead of:
	
	> subMapByValue()
	> headMapByValue()
	> tailMapByValue()

what about (I'm not exactly sure what the return type should be):

	Map/SortedMap/BidiMap/SortedBidiMap valueMap()


I haven't looked at the existing code, but I suspect that this way would 
be easier to write, less lines of code, and more OO.

What do you think?




Stephen Colebourne wrote:
> I have been prompted to take a look at DoubleOrderedMap by bugzilla and been
> a little surprised by what I found. Given the history of collections, what
> we have is a single implementation brought in from an external project.
> [collections] should do better :-)
> 
> A bidirectional map is a relatively standard concept in computing. It is a
> map where you can use a key to find a value, or a value to find a key with
> equal ease. This deserves its own interface in [collections] - BidiMap.
> 
> The DoubleOrderedMap class goes beyond this by being Sorted, effectively
> holding all entries in a Compared order always. This effectively equates to
> a second interface in [collections] - SortedBidiMap.
> 
> BidiMap
> ----------
> Map methods +
> BidiMap inverseBidiMap()
> Object getKeyForValue(Object value)
> Object removeValue(Object value)
> Set entrySetByValue()
> Set keySetByValue()
> Collection valuesByValue()
> (these method names are from DoubleOrderedMap, and seem OKish)
> 
> SortedBidiMap
> ----------------
> BidiMap + SortedMap +
> inverseSortedBidiMap()
> subMapByValue()
> headMapByValue()
> tailMapByValue()
> 
> The existing DoubleOrderedMap is an implementation of SortedBidiMap. However
> I would like to rename it to TreeBidiMap.
> 
> An alternative implementation of BidiMap would then be needed, which would
> be useful as it would not require objects to be comparable.
> 
> With these new interfaces, decorators could then be written as required.
> 
> Anything obvious I've missed? Any volunteers?
> 
> Stephen



Mime
View raw message