當我開始將值添加到Set<Integer>
時,我得到排序元素。 請參考下面這個例子:爲什麼設置<Integer>正在排序附加值?
Set<Integer> generated = new HashSet<Integer>();
generated.add(2);
generated.add(1);
generated.add(0);
在這裏,我得到的排序Set
[0, 1, 2]
。我想獲得價值,因爲我添加到generated
對象。
當我開始將值添加到Set<Integer>
時,我得到排序元素。 請參考下面這個例子:爲什麼設置<Integer>正在排序附加值?
Set<Integer> generated = new HashSet<Integer>();
generated.add(2);
generated.add(1);
generated.add(0);
在這裏,我得到的排序Set
[0, 1, 2]
。我想獲得價值,因爲我添加到generated
對象。
A HashSet
沒有元素的可預測順序。使用LinkedHashSet
來保留元素集合的插入順序:
集合接口的哈希表和鏈接列表實現,具有可預測的迭代順序。
Set<Integer> generated = new LinkedHashSet<Integer>();
generated.add(2);
generated.add(1);
generated.add(0);
首先,它只是一個共同發病率,你得到排序值第一次。如果您多次運行該代碼,您將以某種隨機順序看到輸出。這是因爲HashSet
不會對您添加的元素執行任何排序。
現在,按照插入的順序獲取元素,您可以使用LinkedHashSet
來維護插入順序。
首先,關於你的問題的標題,Set<Integer>
只是申報類型及其不負責的任何排序/ unsorting行爲,主要使用Set
接口的原因是關心唯一性 - 它不允許重複,來自Javadocs:的附加信息
Set是一個不能包含重複元素的集合。
其次,那就是你得到的有序set純concidence,使用HashSet
當你不通過它進行遍歷時,從javadocs:
關心順序,更多相關信息它不保證爲集合的迭代次序;在 特別是,它不能保證該訂單隨着時間的推移將保持恆定 。這個類允許null元素。
三,關於你在找什麼:
我想,因爲我加入到生成的對象中獲取價值。
,那麼你需要使用LinkedHashSet
從javadocs負責其中的元素插入的順序,再次:
此鏈接列表定義在 哪些元素迭代順序,這是爲了被插入到集合(插入順序)中。需要注意的是,如果一個元素重新插入 設置
你可以使用它只是這樣 插入順序不受影響:
Set<Integer> generated = new LinkedHashSet<Integer>();
第四個和最後,作爲附加信息,另一個重要的集合,你需要知道它,是TreeSet
,它保證元素將按照自然順序升序排序,:
的元件使用他們的自然順序進行排序,或者由一 比較集合創建時提供,這取決於所使用 構造
的可能重複的[這是如何的HashSet產生排序輸出?]( http://stackoverflow.com/questions/18648521/how-is-this-hashset-producing-sorted-output) – Radiodef 2015-02-08 01:25:18