2014-04-15 42 views
-7

如果散列表是一個鏈表元素的數組,並且散列碼是數組中元素的索引,那麼爲什麼散列表不會保持插入的順序?爲什麼散列表不能保持插入順序?

+2

因爲它是散列值。哈希不保持排序。 – EJP

+2

http://en.wikipedia.org/wiki/Hash_table –

+0

順便說一句,雖然可預測順序是[LinkedHashMap]的主要用例(http://docs.oracle.com/javase/8/docs/api/java /util/LinkedHashMap.html) –

回答

1

簡言之,一個哈希表(字典)不保持插入的總訂單,因爲它並不需要。抽象數據類型支持ammortized O(1)插入,刪除和搜索,但不支持枚舉,並且不對鍵集中的元素施加任何順序。

HashTable實現了一個字典,並且不會保留插入的總順序,因爲具有不同哈希值的插入映射到不同的鏈。在使用鏈接的字典實現的情況下,具有碰撞哈希的鍵存儲在鏈接列表中(如問題中所述),並且確實按照插入的順序進行維護。還有許多其他(更快)的字典實現沒有這個屬性。請參閱thees lecture筆記以瞭解有關開放尋址(不保留碰撞元素的插入順序的字典實現模式)的討論。特別是,使用雙散列的開放尋址不會對存儲在密鑰集中的元素施加任何順序。

0

因爲它的設計,這樣,試圖LinkedHashSet代替

相關問題