簡體   English   中英

訂購一個hashset示例?

[英]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只有在數據(幾乎)是靜態且已經排序的情況下才是更有效的替代方案。

HashSet 不保證迭代順序

此類實現Set接口,由哈希表(實際上是HashMap實例)支持。 它不能保證集合的迭代順序; 特別是,它不保證訂單會隨着時間的推移保持不變。 該類允許null元素。

如果您希望能夠控制迭代順序(或者實際上只有一個!),您可能需要選擇不同的數據結構

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM