對於列表,我們使用Collections.sort(List)
方法。如果我們想要排序HashSet
怎麼辦?如何排序HashSet?
回答
您可以改爲使用TreeSet。
使用java.util.TreeSet
作爲實際對象。當你迭代這個集合時,這些值會以一個明確定義的順序返回。
如果您使用java.util.HashSet
那麼順序取決於一個內部函數,而不是可能不是詞法。
你爲什麼假設他們存儲'String'值? –
雖然我可能沒有使用Lexicalography,但是它並不精確;-) –
這是非常錯誤的。它不以按照詞典(sp?)的順序存儲密鑰。它要麼使用它們的自然順序(這取決於按鍵實現的「Comparable」接口),還是使用提供的「比較器」。 –
HashSet不保證其元素的任何順序。如果您需要此保證,請考慮使用TreeSet來保存您的元素。
但是如果你只需要排序爲這一個發生您的要素,然後只是暫時創建列表和排序是:
Set yourHashSet = new HashSet();
...
List sortedList = new ArrayList(yourHashSet);
Collections.sort(sortedList);
所有對象添加到TreeSet
,你會得到一個有序集合。以下是一個原始示例。
HashSet myHashSet = new HashSet();
myHashSet.add(1);
myHashSet.add(23);
myHashSet.add(45);
myHashSet.add(12);
TreeSet myTreeSet = new TreeSet();
myTreeSet.addAll(myHashSet);
System.out.println(myTreeSet); // Prints [1, 12, 23, 45]
這個簡單的命令做了伎倆對我來說:
myHashSet.toList.sorted
我用這個打印語句中,所以如果你需要真正的持續的訂貨,您可能需要使用TreeSets或其他結構在這個線程上提出。
我看不到HashSet或Set在哪裏有一個方法'toList'。 –
它在Spark Shell中工作 –
對我來說這看起來像Scala,但不幸的是,這並不能解決Java中的問題。 – Roberto
HashSet中的元素無法排序。無論何時將元素放入HashSet中,都會弄亂整個桶。關於它的好處是性能上的效率。
TreeSet會在您每次插入元素時自動對所有元素進行排序。
也許,你要做的只是排序一次。在這種情況下,TreeSet不是最好的選擇,因爲它需要一直確定添加新元素的位置。
最有效的解決方案是使用ArrayList。創建一個新列表並添加所有元素,然後對其進行排序。如果你想只保留獨特的元素(除去像集合中的所有副本呢,然後把名單到LinkedHashSet,它會保留你已經排序的順序)
List<Integer> list = new ArrayList<>();
list.add(6);
list.add(4);
list.add(4);
list.add(5);
Collections.sort(list);
Set<Integer> unique = new LinkedHashSet<>(list); // 4 5 6
// The above line is not copying the objects! It only copies references.
現在,你已經得到了有序集合如果你想以列表的形式,然後將其轉換爲列表。
您可以通過以下方式做到這一點:
方法1:
- 創建一個列表,所有的HashSet的值存儲到它
- 排序使用集合列表。排序()
- 存儲列表返回到LinkedHashSet因爲它保留了插入順序
方法2:
- 創建一個TreeSet,所有的值存儲進去。
方法2是更優選的,因爲其他方法消耗大量時間來在哈希集和列表之間來回傳送數據。
您可以像其他答案中提到的那樣使用TreeSet。
下面是關於如何使用多一點的闡述:
TreeSet<String> ts = new TreeSet<String>();
ts.add("b1");
ts.add("b3");
ts.add("b2");
ts.add("a1");
ts.add("a2");
System.out.println(ts);
for (String s: ts)
System.out.println(s);
輸出:
[a1, a2, a3, a4, a5]
a1
a2
b1
b2
b3
1. Add all set element in list -> al.addAll(s);
2. Sort all the elements in list using -> Collections.sort(al);
public class SortSetProblem {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList();
Set<String> s = new HashSet<>();
s.add("ved");
s.add("prakash");
s.add("sharma");
s.add("apple");
s.add("ved");
s.add("banana");
System.out.println("Before Sorting");
for (String s1 : s) {
System.out.print(" " + s1);
}
System.out.println("After Sorting");
al.addAll(s);
Collections.sort(al);
for (String set : al) {
System.out.print(" " + set);
}
}
}
輸入 - 粘彈性阻尼器普拉卡什·夏爾馬蘋果粘彈性阻尼器香蕉
輸出 - 蘋果香蕉prakash sharma ved
可以使用番石榴庫爲同一
Set<String> sortedSet = FluentIterable.from(myHashSet).toSortedSet(new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
// descending order of relevance
//required code
}
});
的Java 8的排序方式將是:
fooHashSet.stream()
.sorted(Comparator.comparing(Foo::getSize)) //comparator - how you want to sort it
.collect(Collectors.toList()); //collector - what you want to collect it to
* Foo::getSize
這是一個例子如何YourItem的的HashSet的自然排序尺寸。
* Collectors.toList()
是要收集整理成一個列表中,您將需要
捕捉到它,我們不能決定一個HashSet的元素將被自動排序的結果。但我們可以通過轉換爲TreeSet或任何列表(如ArrayList或LinkedList等)對它們進行排序。
// Create a TreeSet object of class E
TreeSet<E> ts = new TreeSet<E>();
// Convert your HashSet into TreeSet
ts.addAll(yourHashSet);
System.out.println(ts.toString() + "\t Sorted Automatically");
- 1. 排序的HashSet
- 2. 爲什麼HashSet被排序?
- 3. 如何按順序對HashSet()函數數據進行排序?
- 4. 如何序列化HashSet
- 5. 排序在Java中的HashSet的元素
- 6. 我如何保持hashset按字母順序排列?
- 7. 'Set = new HashSet'或'HashSet = new Hashset'?
- 8. Java:如何按照SIZE(最小的第一個)的順序優先排列HashSet?
- 9. 如何基於這些標準對對象的HashSet進行排序?
- 10. 如何使用HashSet的
- 11. 如何比較兩個HashSet?
- 12. HashSet限制 - 如何繼續?
- 13. 用兩個不同的值對HashSet進行排序?
- 14. 按兩個條件對hashSet進行排序
- 15. HashSet是否執行內部排序作業?
- 16. 按java中的值對HashSet進行排序
- 17. GLIb數組排序,如何排序?
- 18. 如何排序ArrayList?
- 19. 如何排序@ Html.DropDownListFor?
- 20. 如何排序列
- 21. MIPS:如何排序
- 22. 如何排序VARCHAR
- 23. 如何排序CopyOnWriteArrayList
- 24. 如何排序radgridview
- 25. 如何排序NSDictionary?
- 26. 如何排序GridItemCollection
- 27. 如何排序HTML
- 28. 如何排序ObservableCollection
- 29. 如何排序mutablesarray?
- 30. 如何排序datagriview?
「HashSet」是一個無序集合。 –
由於'Set'沒有隨機訪問方法(即給定索引處的'.get()'元素),所以你不能這樣做,這對於排序算法來說基本上是必需的;) – fge
你可以將它轉換爲先列出然後排序,如果您需要排序 – demongolem