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 18:03:14 GMT
in SortedBidiMap

I made a mistake.... in SortedBidiMap, my suggested valueMap() would at 
least have to return a java.util.SortedMap, since java.util.Map doesn't 
have the headMap, tailMap, and subMap methods.




__matthewHawthorne wrote:
> 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