Search code examples
javacollectionscomparablelistiterator

List with Comparable Vs TreeSet


Option 1: Make a list which implements Comparable and sort it using collections.sort(List l) every time you add a value. Option 2: Make a TreeSet (which keeps itself sorted all the time).

Which one will be faster? I am asking this because List gives me the option of ListIterator which I need in my case, since it lets me add an element while iterating.


Solution

  • The most important differences:

    Criterion       | List with Collections.sort | TreeSet 
    ----------------+----------------------------+---------
    cost of adding  | O(n log n)                 | O(log n)
    equal sort keys | permitted                  | eliminated as duplicates
    iteration       | bidirectional, can insert  | unidirectional, can not insert
    

    To insert an element when iterating without getting a ConcurrentModificationException, you can do:

    for (E e : new ArrayList<E>(collection)) {
        // some other code
    
        collection.add(anotherE);
    }