Uploaded image for project: 'Commons Collections'
  1. Commons Collections
  2. COLLECTIONS-410

SetUniqueList.addAll() is very slow

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 4.0-alpha1, 4.0
    • None
    • None
    • java 1.6.0_24
      Ubuntu 11.10

    Description

      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

      Attachments

        1. Test.java
          0.8 kB
          Adrian Nistor
        2. patch.diff
          1.0 kB
          Adrian Nistor

        Activity

          People

            Unassigned Unassigned
            adriannistor Adrian Nistor
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: