[英]ordering a hashset example?
我需要一個關於如何在HashSet
上使用類似的類來獲得升序的示例。 假設我有一個像這樣的HashSet
:
HashSet<String> hs = new HashSet<String>();
我怎樣才能讓hs
按升序排列?
請改用TreeSet
。 它有一個帶Comparator
的構造函數 。 它會自動對Set
排序。
如果要將HashSet
轉換為TreeSet
,請執行以下操作:
Set<YourObject> hashSet = getItSomehow();
Set<YourObject> treeSet = new TreeSet<YourObject>(new YourComparator());
treeSet.addAll(hashSet);
// Now it's sorted based on the logic as implemented in YourComparator.
如果您擁有的項目已經實現了Comparable
並且其默認訂購順序已經是您想要的,那么您基本上不需要提供Comparator
。 然后,您可以直接根據HashSet
構造TreeSet
。 例如
Set<String> hashSet = getItSomehow();
Set<String> treeSet = new TreeSet<String>(hashSet);
// Now it's sorted based on the logic as implemented in String#compareTo().
HashSet
“不保證集合的迭代順序。” 請改用LinkedHashSet
。
附錄:我將第二個@BalusC關於實現Comparable
的觀點,並表達對LinkedHashSet
的輕微偏好,它提供了“可預測的迭代順序......而不會產生與TreeSet
相關的增加的成本。”
附錄:@Stephen提出了一個重點,它有利於@BalusC對TreeMap
的建議。 LinkedHashSet
只有在數據(幾乎)是靜態且已經排序的情況下才是更有效的替代方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.