难道一个Java设置保留订单吗? 一种方法返回一个设置为我和所谓的数据是有序的,但遍历集合,该数据是无序的。 有没有更好的方式来管理呢? 请问该方法需要改变返回低于设定其他的东西吗?
Answer 1:
该Set
界面不提供任何排序保证。
它的子接口SortedSet
表示是根据一些标准来分类的一组。 在Java 6中,有实现两个标准集装箱SortedSet
。 他们是TreeSet
和ConcurrentSkipListSet
。
除了SortedSet
接口,也有在LinkedHashSet
类。 它记住其中元素插入到所述一组的顺序,以该顺序返回其元素。
Answer 2:
LinkedHashSet是你所需要的。
Answer 3:
正如许多成员建议使用LinkedHashSet保持集合的顺序。 U可以使用此实现包装你的设置。
SortedSet接口可用于排序顺序,但你的目的使用LinkedHashSet。
也从文档,
“这个实现由HashSet的提供,而不会引起与TreeSet的相关成本增加的指定,通常杂乱无章的排序可以让客户,它可以用来产生一组具有相同的顺序原件及复印件,不管原始的集的实现:”
来源: http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html
Answer 4:
设置只是一个接口。 为了留住订单,你必须使用一个特定的实现,接口和子接口SortedSet的,例如TreeSet中或LinkedHashSet。 你可以用你的设置是这样的:
Set myOrderedSet = new LinkedHashSet(mySet);
Answer 5:
为了保持顺序使用List
或LinkedHashSet
。
Answer 6:
下面是标准的顺序特性的快速摘要Set
在Java中可用的实现:
- 保持插入顺序: LinkedHashSet和CopyOnWriteArraySet (线程安全的)
- 保持在设定的范围内排序的项目: TreeSet中 , EnumSet (具体以枚举)和ConcurrentSkipListSet (线程安全的)
- 不保留的项目在任何特定的顺序: HashSet的 (你试过一)
针对您的特殊情况下,您可以将项目先进行排序,然后用1或2个(最有可能的任何LinkedHashSet
或TreeSet
)。 或可替换地, 更有效地 ,你可以只未排序的数据添加到TreeSet
,将采取自动排序为你的照顾。
Answer 7:
从的Javadoc Set.iterator()
返回在此set的元素的迭代器。 这些元件在没有特定的顺序返回(除非该组是一些类,提供了保证的一个实例)。
而且,正如已经指出shuuchan ,一个TreeSet
是系统的实现Set
,有一个保证的顺序:
这些元素使用其自然顺序进行排序,或者由集合创建时提供的比较,这取决于使用的构造。
Answer 8:
通常设定为不守秩序,如HashSet的,以便快速找到emelent,但你可以尝试LinkedHashSet它会保持你放的顺序。
Answer 9:
一个LinkedHashSet是HashSet的有序的版本维护所有元素双向链表。 当你关心的迭代顺序使用这个类,而不是一个HashSet。
Answer 10:
Set接口本身并没有规定任何特定的顺序。 该SortedSet的但是确实。
Answer 11:
通过集中返回的迭代器并不想以有序的方式返回数据。 看到这个两个java.util.Iterators相同的集合:他们必须在同一顺序返回元素?
Answer 12:
只有SortedSet
可以做的排序Set