Java集保留順序嗎?一個方法正在返回一個Set給我,並假定數據是有序的,但迭代Set,數據是無序的。有沒有更好的方法來管理?該方法是否需要更改以返回Set以外的其他內容?Java設置保留順序?
回答
Set
接口不提供任何訂購保證。
它的子接口SortedSet
表示一個按照某種標準排序的集合。在Java 6中,有兩個標準容器實現SortedSet
。他們是TreeSet
和ConcurrentSkipListSet
。
除了SortedSet
接口之外,還有LinkedHashSet
類。它會記住元素插入到集合中的順序,並按照該順序返回其元素。
此外,由於Java 8中[不同的字符串哈希](http://permalink.gmane.org/gmane.comp.java.openjdk.core-libs.devel/10361),集合中的默認(未排序)排序地圖將會改變。如果您依賴未排序的排序,您的代碼將在Java 8下表現不同。 – rustyx
LinkedHashSet是你需要的。
一個'List'不是'Set'(它不保證會員的獨特性)。 –
在許多商業獨特的情況下,列表不能用於保留訂單而不是集合。 LinkedHashSet維護訂單並存儲唯一。 – gubs
設置只是一個接口。爲了保留順序,您必須使用該接口和子接口SortedSet的特定實現,例如TreeSet或LinkedHashSet。你可以用你的設置是這樣的:
Set myOrderedSet = new LinkedHashSet(mySet);
從Javadoc文檔Set.iterator()
:
返回在此set的元素的迭代器。這些元素以特定的順序返回(除非這個集合是某個提供擔保的類的實例)。
而且,正如已經shuuchan說,一個TreeSet
是有保證的順序的Set
系統的實現:
的元素使用其自然順序進行排序,或者由集合創建提供了一個比較時間,取決於使用哪個構造函數。
通常設置不守秩序,如HashSet的,以便快速找到emelent,但你可以嘗試LinkedHashSet它會保持你放的順序。
Set接口本身並沒有規定任何特定的順序。然而,SortedSet確實如此。
Set返回的Iterator不假設以有序方式返回數據。 看到這個Two java.util.Iterators to the same collection: do they have to return elements in the same order?
排序以下是可用的標準Set
實現的順序特徵在Java中的快速摘要:
- 保持插入順序: LinkedHashSet和CopyOnWriteArraySet(線程安全)
- 保持排序集內的項目:TreeSet,EnumSet(專用於enum S)和ConcurrentSkipListSet(線程安全的)
- 不保留任何特定順序的項目:HashSet(在你嘗試過一個)
針對您的特殊情況下,您可以將項目先進行排序,然後使用1或2中的任何一個(最可能是LinkedHashSet
或TreeSet
)。或者,更有效率,您可以將未排序的數據添加到TreeSet
,這將自動爲您處理排序。
由於許多成員建議使用LinkedHashSet來保留集合的順序。你可以使用這個實現來包裝你的設置。
SortedSet實現可用於排序順序,但爲了您的目的使用LinkedHashSet。
從文檔此外,
「這個實現由HashSet的提供,而不會引起與TreeSet的相關成本增加的指定,通常雜亂無章的排序可以讓客戶,它可以用來產生一組副本具有相同的順序作爲原始,無論原來設定的實施:「
來源:http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html
- 1. 保留屬性順序的java xml庫
- 2. ETS設置保存順序?
- 3. 保留哈希表順序
- 4. 保留註釋的順序
- 5. Seq.groupBy:保留原始順序
- 6. ActiveRecord.find(array_of_ids),保留順序
- 7. OrderedDict不保留順序
- 8. 保留數組的順序
- 9. ,保留插入順序
- 10. 保留SOAP結果的排序順序
- 11. Java - 設置不按順序打印
- 12. 保留的DropDownList設置
- 13. 保留設置參數
- 14. Sqlite如何保留INSERT的順序
- 15. HTML5畫布不保留繪製順序
- 16. net xmlserializer:保留屬性順序
- 17. 保留函數實現的順序
- 18. groovy - xml - 保留屬性順序
- 19. 保留表中的商品順序
- 20. 保留插入數據的順序phpmyadmin
- 21. Python OrderedDict不保留元素順序
- 22. HQL保留子查詢的順序
- 23. 保留的順序進行查詢時
- 24. Enumerable的group_保留Enumerable的順序嗎?
- 25. 確實GetPropertyNames()保留屬性順序
- 26. IOrderedEnumerable.Select()是否保留元素順序?
- 27. 連接具有順序保留
- 28. 保留所選對象的順序
- 29. Infinispan緩存保留插入順序
- 30. R保留行順序ggplot2 geom_tile
」的元素沒有特定的順序返回(除非該集是一些類,它提供了保證的一個實例)「。是一個集合的迭代器方法所說的。發現[here](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Set.html) – keyser