Java的设置保留订单吗?Java的设置保留订单吗?(Java Set retain order?)

2019-05-14 12:55发布

难道一个Java设置保留订单吗? 一种方法返回一个设置为我和所谓的数据是有序的,但遍历集合,该数据是无序的。 有没有更好的方式来管理呢? 请问该方法需要改变返回低于设定其他的东西吗?

Answer 1:

Set界面不提供任何排序保证。

它的子接口SortedSet表示是根据一些标准来分类的一组。 在Java 6中,有实现两个标准集装箱SortedSet 。 他们是TreeSetConcurrentSkipListSet

除了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:

为了保持顺序使用ListLinkedHashSet



Answer 6:

下面是标准的顺序特性的快速摘要Set在Java中可用的实现:

  1. 保持插入顺序: LinkedHashSet和CopyOnWriteArraySet (线程安全的)
  2. 保持在设定的范围内排序的项目: TreeSet中 , EnumSet (具体以枚举)和ConcurrentSkipListSet (线程安全的)
  3. 不保留的项目在任何特定的顺序: HashSet的 (你试过一)

针对您的特殊情况下,您可以将项目先进行排序,然后用1或2个(最有可能的任何LinkedHashSetTreeSet )。 或可替换地, 更有效地 ,你可以只未排序的数据添加到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



文章来源: Java Set retain order?
标签: java sorting set