2012-02-09 79 views
0

在Java 5中,如果我有一個集合,並且我將兩個對象添加到集合中。當我檢索對象時,它是否會按照我添加的順序返回給我? 我無法找到答案。它取決於我使用哪個Set實現?java從集合中檢索對象

+0

我要問「爲什麼不直接使用一個隊列」,然後我看到這個詞「設置」。 :)所以我假設你想讓你的數據結構保持「唯一性」屬性?如果是,那麼Jon Skeet提到,LinkedHashSet是完美的。如果你不關心唯一性,那麼隊列就可以做得很好。 – eternaln00b 2012-02-09 18:58:22

+0

這是'Set'的文檔。請參閱http://docs.oracle.com/javase/6/docs/api/java/util/Set.html – 2012-02-09 19:03:13

回答

9

是的,這取決於您使用哪個實施。例如,LinkedHashSet將保留插入順序:

設置界面的哈希表和鏈接列表實現,具有可預測的迭代順序。這個實現與HashSet的不同之處在於它保持了一個雙向鏈表,它貫穿其所有條目。此鏈接列表定義迭代排序,即元素插入到集合中的順序(插入順序)。請注意,如果元素重新插入到集合中,則插入順序不受影響。 (元素e重新插入一組if s.add(e)在s.contains(E)將調用之前立即返回true調用秒)

...但HashSet不會:

它對集合的迭代次序不作任何保證;特別是,它不能保證訂單會隨着時間的推移保持不變。這個類允許null元素。

0

取決於Set的實施。 LinkedHashSet確實如此。

0

JavaDocs是你最好的朋友。它是特定於實現的。例如:

java.util.Set: 

Iterator<E> iterator(); 
Returns an iterator over the elements in this set. The elements are returned in no particular order (unless this set is an instance of some class that provides a guarantee). 

java.util.TreeSet: 

public Iterator<E> iterator(); 
Returns an iterator over the elements in this set in ascending order. 
2
the documentation

直:

的元素在沒有特定的順序返回(除非該組是 一些類,其提供的一個實例保證)。

0

Set接口本身用於無序容器實現。但是可能會有Set的實現返回元素的特定順序。

也看到了Set.iterator文檔:

返回在此set的元素的迭代器。這些元素沒有特定的順序返回(除非該集是一些類,它提供了保證的實例)