Java Set是否保持秩序?一个方法返回一个集合,假设数据是有序的,但在集合上迭代,数据是无序的。有没有更好的办法来解决这个问题?是否需要更改方法以返回Set以外的内容?
当前回答
LinkedHashSet是你需要的。
其他回答
从javadoc for Set.iterator():
返回此集合中元素的迭代器。元素不按特定顺序返回(除非这个集合是某个提供保证的类的实例)。
并且,正如shuuchan已经说过的,TreeSet是Set的一个实现,它有一个保证的顺序:
元素使用它们的自然顺序进行排序,或者通过在创建set时提供的Comparator进行排序,这取决于使用哪个构造函数。
Set只是一个接口。为了保持顺序,您必须使用该接口和子接口SortedSet的特定实现,例如TreeSet或LinkedHashSet。你可以这样包装你的Set:
Set myOrderedSet = new LinkedHashSet(mySet);
LinkedHashSet是你需要的。
Set接口本身没有规定任何特定的顺序。但是SortedSet可以。
LinkedHashSet是HashSet的有序版本,它维护一个跨所有元素的双链表。当您关心迭代顺序时,请使用该类而不是HashSet。
推荐文章
- 如何在POM.xml中引用环境变量?
- 如何在android中复制一个文件?
- 将整数转换为字符串,以逗号表示千
- 接口方法的最终参数-有什么意义?
- Java中的@UniqueConstraint注释
- 如何在清洁模式下运行eclipse ?如果我们这样做会发生什么?
- 获取java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory异常
- Java中的正则表达式命名组
- c#和Java的主要区别是什么?
- 什么是NullPointerException,我如何修复它?
- 在Java中使用“final”修饰符
- 无法在Flutter上找到捆绑的Java版本
- 如何在Kotlin解析JSON ?
- 如何在新的材质主题中改变背面箭头的颜色?
- 如何设置OkHttp连接超时