Java HashSet - 有没有办法指定元素的显示顺序?

标签 java output hashset

我刚刚开始调试一些用Java编写的软件,在其中一个网页上,有一个下拉列表,列出了一周中的几天。

展开后,列表会在周日到周六的下拉列表中显示一周中的几天。但是,当未选择/展开下拉菜单时,其文本显示:

Mo-Su-Tu-We-Th-Fr-Sa

即未选择/展开按钮时显示的日期顺序不正确。

我的想法是,这可能是因为该类是使用 HashSet 对象编写的来显示日期:

private List<String> allDays = Arrays.asList(SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY);
...
private Set<String> currentDays = new HashSet<String>(allDays);

据我了解,使用 HashSets,您无法保证检索/显示其元素的顺序 - 这是正确的吗?

我尝试将类型从 HashSet 更改为 ArrayList,以便我可以在集合中为一周中的每一天设置明确的位置,但这会导致其他编译错误代码中的其他地方。我的想法是,为什么它被实现为 HashSet 而不是有序列表,一定有设计原因,所以我真的不想重构代码来更改对象的类型。

那么有没有一种方法可以指定在这种情况下使用的 HashSet 的输出,以便预先确定其元素的显示顺序?

我可以将其转换为有序列表类型,即ArrayList/其他一些结构化数据类型,或者我可以具体告诉HashSet对象在什么中我想要显示其元素的顺序?

最佳答案

您可以使用LinkedHashSet它保持元素的顺序。

Hash table and linked list implementation of the Set interface, with predictable iteration order. This implementation differs from HashSet in that it maintains a doubly-linked list running through all of its entries. This linked list defines the iteration ordering, which is the order in which elements were inserted into the set (insertion-order). Note that insertion order is not affected if an element is re-inserted into the set. (An element e is reinserted into a set s if s.add(e) is invoked when s.contains(e) would return true immediately prior to the invocation.)

以上引用来自:LinkedHashSet

关于Java HashSet - 有没有办法指定元素的显示顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44136555/

相关文章:

java - StringTokenizer 是否对标记有任何最大长度?

java - 存储六边形 map 的最佳数据结构是什么

java - 很难专注于 Selenium 中新打开的窗口

python - 特殊字符显示为问号

php - php 中带有换行符的 MySQL 输出

c - 如何用C从文件中读取特定数量的行

c# - HashSet<int> 和 List<int> 的快速交集

java - 我有点困惑不同集合 和 集合 和有什么不一样?

javascript - 如何制作懒惰集?

java - HashSet:无法删除相等的对象?