[英]Java HashSet - is there a way to specify the order in which elements will be displayed?
我剛剛開始調試一些用Java編寫的軟件,並且在一個網頁上,有一個下拉列表,列出了一周中的每一天。
展開后,該列表顯示從星期日到星期六的下拉列表中的星期幾。 但是,如果未選擇/擴展下拉菜單,則文本顯示為:
莫 - 蘇塗我們-TH-FR-薩
即未選擇/展開按鈕時顯示的天數順序不正確。
我的想法是,這可能是因為使用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
為有序列表的類型,即ArrayList
/其他結構化數據類型,還是可以明確告訴HashSet
對象以什么順序顯示其元素?
您可以使用LinkedHashSet
保持元素順序。
Set接口的哈希表和鏈表實現,具有可預測的迭代順序。 此實現與HashSet的不同之處在於,它維護貫穿其所有條目的雙向鏈接列表。 此鏈表定義了迭代順序,即將元素插入到集合中的順序(插入順序)。 請注意,如果將元素重新插入到集合中,則插入順序不會受到影響。 (如果在s.contains(e)在調用之前即將返回true的情況下調用s.add(e),則將元素e重新插入到set s中。)
據我了解,使用HashSets,您不能保證將檢索/顯示其元素的順序-正確嗎?
正確。
因此,有沒有一種方法可以指定HashSet的輸出(在這種情況下使用該輸出),以便預先確定其元素的顯示順序?
否toString()
方法以無法更改的順序“輸出”元素。
但是,您可以編寫一種以特定順序顯示HashSet
元素的方法。 例如:
private static String[] DAYS = {"Sun", "Mon", "Tue", "Wed", "Thu",
"Fri", "Sat"};
String printDays(Set<String> days) {
StringBuilder sb = new StringBuilder();
for (String s: DAYS) {
if (days.contains(s)) {
if (sb.length() == 0) {
sb.append("{" + s);
} else {
sb.append(", " + s);
}
}
}
sb.append("}");
return sb.toString();
}
可以很容易地將其修改為與enum
一起使用...,並且該方法可以是enum
類的靜態方法。
首先,一周中的那幾天必須是枚舉值。 如果這樣做,您將可以使用:
EnumSet.allOf(DaysOfWeekEnum.class);
它將按照枚舉中定義的順序顯示您的所有日子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.