2017-02-14 56 views
1
Set<Integer> set=new HashSet<Integer>(); 
    set.add(41); 
    set.add(52); 
    set.add(33); 

    Iterator<Integer> iterate=set.iterator(); 
    System.out.println(iterate.next()); 
    System.out.println(iterate.next()); 
    System.out.println(iterate.next()); 

O/P-> 33 52 41 相反,我应该得到41,52和33同时使用设置在爪哇(硒),我得到的值从下到上 - 而不是自上而下

Plz解释了为什么它以这种方式打印,或者我做错了什么。

+2

通常集合是无序集合。查找LinkedHashSet。 – synchronizer

回答

0

您必须使用LinkedHashSet在您的Set中保留广告订单。
LinkedHashSet旨在保留广告订单。从JavaDocs

的哈希表和链接列表实现Set接口,具有 预知的迭代顺序。此实现与HashSet 的不同之处在于它保持一个双向链接列表,其中包含所有 条目。此链接列表定义了迭代排序,即将元素插入到集合(插入顺序)中的顺序。 请注意,如果将元素重新插入集合 ,则插入顺序不受影响。 (如果s.add元素e是重新插入到集合S(e)是 调用时s.contains(E)将在 调用之前立即返回true。)

请参阅问题Ordering of elements in Java HashSet了解关于订购HashSet。从JavaDocs:

此类实现Set接口,由哈希表 (实际上是一个HashMap实例)支持。它不保证集合的迭代次序为 ;特别是,并不保证订单在一段时间内保持不变。该类允许使用空元素 。

相关问题