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

голоса
23

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

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

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

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

Задан 07/07/2009 в 07:10
источник пользователем
На других языках...                            


4 ответов

голоса
36

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

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

Ответил 07/07/2009 в 07:14
источник пользователем

голоса
5
TreeSet<Integer> treeSetObj = new TreeSet<Integer>(new Comparator<Integer>()
  {
  public int compare(Integer i1,Integer i2)
        {
        return i2.compareTo(i1);
        }
  });

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

Ответил 07/07/2009 в 07:16
источник пользователем

голоса
9

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

descendingSet

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

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

    The returned set has an ordering equivalent to

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

    Specified by:
        descendingSet in interface NavigableSet<E>

    Returns:
        a reverse order view of this set
    Since:
        1.6
Ответил 18/05/2010 в 20:54
источник пользователем

голоса
0
TreeSet t = new TreeSet(new MyComparator());
  {
class MyComparator implements Comparator
{
  public int compare(Integer i1,Integer i2)
        {
         Integer I1=(Integer)i1;
         Integer I2=(Integer)i2;
         return I2.compareTo(I1);  // return -I1compareTo(I2);
        }
}
  }
Ответил 28/10/2018 в 02:53
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more