Сделать другой TreeSet, поддерживающий тот же порядок, что и другой - PullRequest
0 голосов
/ 21 февраля 2020

Допустим, у меня есть TreeSet, который естественно упорядочен. Какой интерфейс и метод можно использовать для создания нового TreeSet, поддерживающего тот же порядок, что и в первом списке.

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Используйте то же самое Comparator (или naturalOrder, если ваши элементы реализуют Comparable):

class A implements Comparable<A> { }


final TreeSet<A> firstSet = new TreeSet<>();
final TreeSet<A> secondSet = new TreeSet<>(firstSet.comparator());
final TreeSet<A> secondSetNaturalOrder = new TreeSet<>(Comparator.naturalOrder());
0 голосов
/ 21 февраля 2020

Для этого вам не нужен TreeSet <>. Вы можете использовать LinkedHashSet <> ().

       List<Integer> list = new ArrayList<>(List.of(10,3,2,2,1,20,40,2));

      Set<Integer> set1 = new LinkedHashSet<>();
      set1.addAll(list);

За исключением удаленных дубликатов, порядок сохраняется.

      System.out.println("set1 = " + set1);
      System.out.println("list = " + list);

Но для TreeSet набор сортируется по natural order объектов.

      Set<Integer> set2 = new TreeSet<>();

      set2.addAll(list);
      list.sort(Comparator.naturalOrder());

Опять же, порядок тот же, но отсортированный. TreeSet по умолчанию используется для естественной сортировки. Для List.sort(), comparator должен быть предоставлен.

  System.out.println("set2 = " + set2);
  System.out.println("list = " + list);
...