2009-07-07 9 views
22

Здесь по убыванию это фрагмент кода, который я использовал для Java 5.0TreeSet на заказ элементов в порядке

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

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

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

+2

Флип порядок '' 'this''' и' '' that''' в переопределены '' 'compareTo''' так элементы вставлены в обратном порядке. – opyate

ответ

35

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

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

+1

Спасибо. descendingIterator() был введен в 6.0 и не был там в 5.0 –

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

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

+0

Нет, это не требуется. –

9

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

descendingSet

общественного NavigableSet descendingSet()

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

The returned set has an ordering equivalent to 

Collections.reverseOrder (компаратор()). Выражение s.descendingSet(). DescendingSet() возвращает вид s по существу , эквивалентный s.

Specified by: 
     descendingSet in interface NavigableSet<E> 

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