Сортировка LinkedHashSet
Мне интересно, можно ли сортировать LinkedHashSet. Я пробовал утверждение
Collections.sort((List<Comparable> paragraph);
Однако это просто порождает ошибку, которую нельзя вставить в список. Есть ли способ сделать это, или я должен использовать другую структуру данных?
Ответы
Ответ 1
Вы должны использовать SortedSet
, например TreeSet
или ConcurrentSkipListSet
, если вы хотите упорядочить на основе сравнения (например, отсортированный порядок).
A LinkedHashSet
сохраняет порядок на основе порядка вставки.
Если вы действительно хотите использовать Collections.sort
, вы можете преобразовать LHS в список, фактически создав List
(хотя вопрос не говорит нам о типе paragraph
, поэтому я предполагаю, что это String
)
List<String> listParagraph = new ArrayList<String>(paragraph);
Collections.sort(listParagraph)
но это, вероятно, не лучший подход.
Ответ 2
Collections.sort не работает на Set
s, только на List
s. Если вам нужно отсортировать данные, уже находящиеся в Set
, вы можете сначала добавить их в List
.
Ответ 3
Вы можете добавить объект LinkedHashSet (связанныйHashSet) в TreeSet, и он будет отсортирован.
TreeSet<T> treeSet = new TreeSet<t>();
treeSet.addAll(linkedHashSet);
treeSet - это отсортированный набор.
Обратите внимание, что вам необходимо сделать эти типы T сопоставимыми (путем реализации интерфейса Comparator).
Ответ 4
Да, ты можешь. Java 8 сделала нашу жизнь проще :)
создание связанного списка (это выглядит просто для меня, вы можете напрямую вставить в LinkedHashSet)
LinkedList<String> lList = new LinkedList<String>();
lList.add("Ravi");
lList.add("Vijay");
lList.add("Ravi");
lList.add("Ajay");
lList.add(null);
LinkedHashSet<String> lHashSet = new LinkedHashSet<>();
lHashSet.addAll(lList);
давай сортируем сейчас
lHashSet.stream().sorted((String s1,String s2)->{
return s1.compareTo(s2);
});
//now print it
System.out.println("----");
lHashSet.forEach(action->{
System.out.println(action);
});
System.out.println("----");
Удачного кодирования :)