pivot-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Simon Chatelain <schat...@gmail.com>
Subject Re: Pivot Map with comparator issue.
Date Fri, 25 Mar 2011 12:27:19 GMT
The exact code I added on my side ;-)

Thank you

On Fri, Mar 25, 2011 at 1:25 PM, Greg Brown <gk_brown@verizon.net> wrote:

> I think you are correct. Adding this code below "count = 0;" in
> HashMap#rehash() eliminates the errors:
>
> if (keys != null) {
>     keys.clear();
> }
>
> I'll check this in.
>
> On Mar 25, 2011, at 8:08 AM, Simon Chatelain wrote:
>
> Hello again,
>
> After some further investigation, I could make a guess : does the problem
> comes from the fact that in the HashMap#rehash() method the keys list is not
> cleared ?
>
> What do you think ?
>
> Simon
>
> On Fri, Mar 25, 2011 at 11:59 AM, Simon Chatelain <schatela@gmail.com>wrote:
>
>> Hello,
>>
>> I observed a really weird behavior when using a Pivot Map with a
>> comparator. By executing the code bellow, we can see that from 0 to 12 the
>> l_KeyCount == l_Map.getCount(). But when adding the 13th element in the map
>> the l_KeyCount become 26 when the l_Map.getCount() == 13. Then if I remove
>> one of the entry of the Map, the iterator on the map's key still return the
>> key corresponding to the removed entry, but the l_Map.containsKey() return
>> false.
>>
>> If I do not set a comparator on the map, I do not have this problem.
>>
>> I looked in the user mailing list for similar issue, but didn't find
>> anything.
>>
>> Sounds like a bug to me or am I missing something ?
>>
>> Simon
>>
>> Map<Integer, String> l_Map = new HashMap<Integer, String>();
>> l_Map.setComparator(new Comparator<Integer>() {
>>
>>     @Override
>>     public int compare(Integer _arg0, Integer _arg1) {
>>         return _arg0.compareTo(_arg1);
>>     }
>> });
>>
>> for (int i = 0; i < 100; i++) {
>>     l_Map.put(i, UUID.randomUUID().toString());
>>
>>     int l_KeyCount = 0;
>>     for (Integer l_Key : l_Map) {
>>         l_KeyCount++;
>>     }
>>     if (l_KeyCount != l_Map.getCount()) {
>>         Logger.getLogger(this.getClass().getName()).log(Level.INFO,
>>                 "l_KeyCount should be {0} but is {1}",
>>                 new Object[] { l_Map.getCount(), l_KeyCount });
>>         l_Map.remove(0);
>>     }
>>     for (Integer l_Key : l_Map) {
>>         if (!l_Map.containsKey(l_Key)) {
>>             Logger.getLogger(this.getClass().getName()).log(Level.INFO,
>>                             "WTF : {0}",
>>             new Object[] { l_Key.toString()});
>>         }
>>     }
>> }
>>
>
>
>

Mime
View raw message