Treeset заказать элементы в порядке убывания

вот кусок кода, который я использовал для Java 5.0

TreeSet<Integer> treeSetObj = new TreeSet<Integer>( Collections.reverseOrder() ) ;

коллекций.reverseOrder() используется для получения компаратора, чтобы изменить способ хранения и итерации элементов.

есть ли более оптимизированный способ сделать это?

3 ответов


почему вы думаете, что этот подход не будет оптимизировано? Обратный порядок Comparator просто будет переворачивать знак вывода из фактического Comparator (или выход из compareTo на Comparable объекты вставляются), и поэтому я бы предположил, что это очень быстро.

альтернативное предложение: вместо того, чтобы изменять порядок хранения элементов, вы можете перебирать их в порядке убывания, используя descendingIterator() метод.


Если вы используете Java 6, есть метод под названием descendingSet().

descendingSet

public NavigableSet descendingSet ()

нисходящий набор поддерживается этим set, поэтому изменения в наборе отражается в нисходящем множестве, и наоборот. Если набор изменяется при итерации через набор в процессе (за исключением собственная операция удаления итератора), результаты итерации являются не определено.

    The returned set has an ordering equivalent to

сборники.reverseOrder (comparator ()). Выражение С. descendingSet().descendingSet() возвращает представление s по существу эквивалентную s.

    Specified by:
        descendingSet in interface NavigableSet<E>

    Returns:
        a reverse order view of this set
    Since:
        1.6

TreeSet<Integer> treeSetObj = new TreeSet<Integer>(new Comparator<Integer>()
  {
  public int compare(Integer i1,Integer i2)
        {
        return i2.compareTo(i1);
        }
  });

необходимо перевернуть результат. Но я думаю, что это просто микро-оптимизации... Тебе действительно это нужно ?