Подтвердить что ты не робот

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

Вот фрагмент кода, который я использовал для Java 5.0

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

TreeSet::descendingSet

В Java 6 и выше, существует метод на TreeSet называется descendingSet() производя NavigableSet объект интерфейса.

public NavigableSet убывающий набор()

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

    The returned set has an ordering equivalent to

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

    Specified by:
        descendingSet in interface NavigableSet<E>

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

Ответ 3

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

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

Ответ 4

Обратное compare

Вы можете изменить порядок двух аргументов в методе compare вашего Comparator.

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);
        }
}
  }