2017-08-08 61 views
1

我定義如下一個HashMap:散列表是按字母順序排列的嗎?

private final Map<String, DataTable> reports = new HashMap(); 

當我把新的項目進入此HashMap他們基於鍵字母順序結束。它爲什麼這樣做?我如何將它們添加到HashMap中?

+0

你是什麼意思「按字母順序結束」?你能展示更多的代碼嗎? – arshajii

+0

未訂購HashMaps。 TreeMaps是。 – bcsb1001

+5

字符串的自然順序**是**字母順序,並且'HashMap'沒有排序。 – Kayaman

回答

2

A HashMap確實明確定義了您添加的元素的NO順序。就像在HashSet中那樣,這些元素是由它們的哈希碼構造的,這或多或少是隨機的。

如果要按照插入順序保存地圖中的順序,則可以改爲使用LinkedHashMap。如果元素在插入後應該排序,則使用TreeMap

+0

我認爲'Set'你明確的意思是'HashSet',是嗎?因爲其他'Set'實現可能不按哈希碼進行排序。 – Zabuza

+0

是的,你是對的。我的意思是HashSet。 – Simulant

+0

我需要'LinkedHashMap',以便它們保持它們添加的順序。 –

0

HashMap的重點在於你放棄了對排序的控制,這樣你就可以在插入和搜索時獲得性能提升,以及其他好處。要取回訂單的控制權,請使用SortedMap

0
LinkedHashMap- preserve the insertion order. 
TreeMap - Elements sorted after insertion. 

HashMap不保留任何插入元素的順序。

0

HashMap不會按照添加方式添加值,只是根據鍵隨機添加值。要按照您要添加的順序添加值,請使用LinkedHashMap,或者如果您希望地圖按字母順序排序,則使用TreeMap。我希望這消除你的懷疑。