當我運行下面顯示的代碼時,輸出是[50,20,5,40,10,30]。 我不明白這個命令。爲什麼輸出不是[10,5,20,30,40,50]?java.util.HashSet int迭代次序
List list = Arrays.asList(10, 5, 10, 20, 30, 40, 50);
System.out.println(new HashSet(list));
當我運行下面顯示的代碼時,輸出是[50,20,5,40,10,30]。 我不明白這個命令。爲什麼輸出不是[10,5,20,30,40,50]?java.util.HashSet int迭代次序
List list = Arrays.asList(10, 5, 10, 20, 30, 40, 50);
System.out.println(new HashSet(list));
此類實現Set接口,由哈希表(實際上是一個HashMap實例)支持。它對集合的迭代次序沒有任何保證;特別是,它不能保證訂單會隨着時間的推移保持不變。這個類允許null元素。
我不想排序。我閱讀文檔,但是當我嘗試另外兩臺電腦時,我得到了相同的輸出。如果訂單不能保證,它是如何相同的? – karlkeller
隨着時間的推移添加和刪除元素,迭代順序可能會發生變化。你不應該依賴Hashset的迭代順序,因爲它「不能保證迭代順序」,儘管在實踐中如果你使用默認的構造函數創建一個新的Hashset並且你添加了相同的元素,那麼你最終會得到相同的迭代訂購。 – raptortech97
raptortech你給了我想知道並想聽到的答案。謝謝。 – karlkeller
HashSet
不維護插入順序。你需要的是一個LinkedHashSet
。
HashSet
類不能保證您輸入數據的順序。
如果不把你的List
在HashSet
,而是與List
繼續你會得到你在它添加值的順序。
您可以使用LinkedHashSet
來保留廣告訂單。
如果你想排序List
那麼你可以使用Collections.sort()
。 (額外的信息,如果你不需要它,請忽略)
'HashSet'不保留插入順序! – NINCOMPOOP
由於HashSets的迭代順序未定義。見Javadoc,你應該在發佈之前諮詢你。 -1 – EJP
EJP你在Baadshah的回答下閱讀我的評論。名譽不是一個目標,我的目標是分享。閱讀raptortech97的回答。 – karlkeller