[ 
https://issues.apache.org/jira/browse/COLLECTIONS-394?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13220946#comment-13220946
 ] 

Michael Pradel commented on COLLECTIONS-394:
--------------------------------------------

It seems the problem affects several other methods in FastTreeMap, specifically 
methods that have been added to TreeMap in Java 1.6. E.g. TreeMap.headMap(K) 
existed before Java 1.6 and is overridden by FastTreeMap, while 
TreeMap.headMap(K, boolean) got added in Java 1.6. and is not overridden by 
FastTreeMap. All inherited methods do not refer to the 'map' field, and 
therefore use the wrong map.

One way to fix these problems is to override all public methods from TreeMap in 
FastTreeMap. Since I'm not familiar with FastTreeMap's implementation, I'll 
leave this task to someone more experienced with the Commons Collections.
                
> FastTreeMap is not compatible with TreeMap
> ------------------------------------------
>
>                 Key: COLLECTIONS-394
>                 URL: https://issues.apache.org/jira/browse/COLLECTIONS-394
>             Project: Commons Collections
>          Issue Type: Bug
>          Components: Map
>    Affects Versions: 3.2.1
>         Environment: all
>            Reporter: Michael Pradel
>
> FastTreeMap extends TreeMap in a way that doesn't preserve the superclass 
> behavior. For example, the following code prints 'null', but I would expect 
> it to print '1=1', which is what TreeMap does:
> TreeMap map = new FastTreeMap();
> //TreeMap map = new TreeMap();
> map.put(1, "1");
> map.put(3, "3");
>               
> Entry e = map.floorEntry(2);
> System.out.println(e);
> This behavior is surprising and can hit you every time a reference of type 
> TreeMap refers to an instance of FastTreeMap. A subclass instance used 
> through a superclass interface shouldn't change the visible behavior of its 
> superclass.
> The reason for this problem seems to be that FastTreeMap both extends TreeMap 
> and delegates to a TreeMap via the 'map' field. I.e., there are  two map 
> instances for a single FastTreeMap instance.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to