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-&GT; 33 52 41 相反,我应该得到41,52和33
Plz解释为什么以这种方式打印或者我做错了。
答案 0 :(得分:0)
您必须使用LinkedHashSet保留Set
中的广告订单。
LinkedHashSet旨在保留广告订单。来自JavaDocs:
使用Set接口的哈希表和链表实现 可预测的迭代顺序。此实现与HashSet不同 因为它维护着一个贯穿所有链接的双向链表 条目。该链表定义了迭代排序,即 将元素插入集合(插入顺序)的顺序。 请注意,如果重新插入元素,则不会影响插入顺序 进入集合。 (如果s.add(e)是,则将元素e重新插入到集合中 当s.contains(e)在紧接之前返回true时调用 调用。)
请参阅问题Ordering of elements in Java HashSet,了解HashSet中的排序方式。来自JavaDocs:
此类实现Set接口,由哈希表支持 (实际上是一个HashMap实例)。它不能保证 集合的迭代顺序;特别是,它并不保证 订单将随时间保持不变。此类允许null 元件。