簡體   English   中英

遍歷HashSet類的實例,期望隨機順序,但結果始終相同

[英]iterating through instance of HashSet class, expect random order but the results are always the same order

我正在嘗試學習Java中的Set接口和HashSet類的概念。 我讀過了

使用HashSet類時,迭代時不能保證元素的順序。

我想出了一些代碼並運行了十次,並且它總是按插入順序進行迭代。 那是因為運氣嗎?

Set<Integer> set1 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
set1.add(2);

Iterator i1 = set1.iterator();
while (i1.hasNext()){
    System.out.println(i1.next());
}

根據javadoc:

此類實現Set接口,該接口由哈希表(實際上是HashMap實例)支持。 它不保證集合的迭代順序。 特別是,它不能保證順序會隨着時間的推移保持恆定。 [...]此類的迭代器方法返回的迭代器是快速失敗的:如果在創建迭代器后的任何時間修改了集合

Java4我們有了LinkedHashSet ,它確保迭代順序和插入順序相同。

是。 這是由於“運氣”。 這取決於JRE的實現! 許多年前,當我開始用Java進行實現時,我就很難學到這一點,並且在不同平台上對代碼進行了測試。

如果我還記得的話,在Windows中, HashSet迭代是完全有序的,但是在Mac OSX中卻完全混亂了!

底線 :始終依靠文檔,而不依賴明顯的結果!

暫無
暫無

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

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