2014-02-10 2 views
0

Я хочу сортировать значения hashset в нисходящем значении на основе длины строки в хэш-наборе.Сортировка хэш-набора по убыванию

HashSet<String> hs = new HashSet<String>(); 
hs.add("The World Tourism Organization"); 
hs.add("reports the following ten countries"); 
hs.add("as the most visited in terms of the number"); 
hs.add("of international travellers."); 
System.out.println(hs); 

Мой вывод должен быть

['as the most visited in terms of the number', 
'reports the following ten countries', 
'The World Tourism Organization', 
'of international travellers.'] 

Что такое метод для сортировки в порядке убывания?

ответ

2

HashSet по определению не сортирует его членов. То, что вы хотите, это TreeSet.

Если у вас есть HashSet вы можете создать TreeSet от него, до тех пор, как объекты Сопоставимые:

TreeSet TS = новые TreeSet (ГВ);

0

Вы должны использовать TreeSet вместо HashSet с собственным пользовательским компаратора, который будет сортировать значения в зависимости от их длины.

Set<String> yourSet = new TreeSet<>(new Comparator<String>() { 
    public int compare(String o1, String o2) { 
     // Your comparison logic goes here 
     return 0; 
    } 
}); 

// Add all the HashSet values to the TreeSet 
yourSet.addAll(hs); 
2

Вы должны использовать TreeSet вместо HashSet или создать компаратор для сортировки набора

0

HashSet не дает какое-либо значимое распоряжение записям. В документации указано:

Он не дает никаких гарантий относительно порядка итераций набора; в частности, он не гарантирует, что порядок будет оставаться постоянным с течением времени.

Чтобы получить разумный заказ, вам нужно использовать другую реализацию Set, такую ​​как TreeSet. TreeSet позволяет предоставить Comparator, который определяет порядок заказа записей; что-то вроде:

public class SortByString implements Comparator<FullName>{ 
    public int compare(FullName n1, FullName n2) { 
     return n1.getLastName().compareTo(n2.getLastName()); 
    } 
} 
Смежные вопросы