commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Adrian Nistor (JIRA)" <j...@apache.org>
Subject [jira] [Created] (COLLECTIONS-410) SetUniqueList.addAll() is very slow
Date Tue, 19 Jun 2012 20:38:44 GMT
Adrian Nistor created COLLECTIONS-410:
-----------------------------------------

             Summary: SetUniqueList.addAll() is very slow
                 Key: COLLECTIONS-410
                 URL: https://issues.apache.org/jira/browse/COLLECTIONS-410
             Project: Commons Collections
          Issue Type: Bug
         Environment: java 1.6.0_24
Ubuntu 11.10
            Reporter: Adrian Nistor
         Attachments: Test.java, patch.diff

Hi,

I am encountering a performance problem in SetUniqueList.addAll().  It
appears in revision 1351837 (19 June 2012).  I attached a test that
exposes this problem and a patch that fixes it.  On my machine, for
this test, the patch provides a 540X speedup.

To run the test, just do:

$ java Test

The output for the un-patched version is:
Time is 2706

The output for the patched version is:
Time is 5

As the patch shows, the problem is that
SetUniqueList.addAll(int index, Collection<? extends E> coll)
performs:
"add(index, e)" for each element in "coll". This is very expensive, 
because each "add(index, e)" performs a 
LinkedList.add(int index, E element), which requires traversing the 
LinkedList to find the index.

The patched version avoids this cost by inserting all the elements at
once, thus performing only one insert.

Is this a bug? If so, can you please confirm that the patch is
correct?

Thanks,

Adrian


--
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

        

Mime
View raw message