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的元素的迭代器。这些元素没有特定的顺序返回(除非该集是一些类,它提供了保证的实例)