Java Set是否保持秩序?一个方法返回一个集合,假设数据是有序的,但在集合上迭代,数据是无序的。有没有更好的办法来解决这个问题?是否需要更改方法以返回Set以外的内容?


当前回答

Set返回的迭代器不假定以Ordered方式返回数据。 两个java.util. iterator指向同一个集合:它们必须以相同的顺序返回元素吗?

其他回答

下面是Java中可用的标准Set实现的顺序特征的快速总结:

保持插入顺序:LinkedHashSet和CopyOnWriteArraySet(线程安全) 在TreeSet, EnumSet(特定于enum)和ConcurrentSkipListSet(线程安全)中保持项目的排序 不以任何特定的顺序保存项:

对于您的特定情况,您可以先对项进行排序,然后使用1或2中的任何一个(很可能是LinkedHashSet或TreeSet)。或者更有效地,您可以将未排序的数据添加到TreeSet,它将自动为您处理排序。

只有SortedSet可以对集合进行排序

Set返回的迭代器不假定以Ordered方式返回数据。 两个java.util. iterator指向同一个集合:它们必须以相同的顺序返回元素吗?

Set接口本身没有规定任何特定的顺序。但是SortedSet可以。

Set只是一个接口。为了保持顺序,您必须使用该接口和子接口SortedSet的特定实现,例如TreeSet或LinkedHashSet。你可以这样包装你的Set:

Set myOrderedSet = new LinkedHashSet(mySet);