2014-02-10 142 views
0

我想根據散列集中字符串的長度對散列值進行降序排序。按降序對散列集進行排序

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的(HS);

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實現,例如TreeSetTreeSet可讓您提供Comparator指定如何訂購條目;例如:

public class SortByString implements Comparator<FullName>{ 
    public int compare(FullName n1, FullName n2) { 
     return n1.getLastName().compareTo(n2.getLastName()); 
    } 
}