为啥哈希表不保持插入顺序? [复制]

Posted

技术标签:

【中文标题】为啥哈希表不保持插入顺序? [复制]【英文标题】:Why a hashtable does not maintain order of insertion? [duplicate]为什么哈希表不保持插入顺序? [复制] 【发布时间】:2014-05-29 06:02:18 【问题描述】:

如果哈希表是链表元素的数组,哈希码是数组中元素的索引,那么为什么哈希表不保持插入顺序??

【问题讨论】:

因为它改为散列。散列不会保留顺序。 en.wikipedia.org/wiki/Hash_table 顺便说一句,迭代而可预测的顺序是LinkedHashMap的主要用例 看到这个问题:[Previous on SO][1] [1]: ***.com/questions/730620/how-does-a-hash-table-work 因为插入顺序与散列无关。 【参考方案1】:

简而言之,哈希表(字典)不维护插入的总顺序,因为它不需要。抽象数据类型支持平均 O(1) 的插入、删除和搜索,但不支持枚举,也不对键集中的元素强加任何顺序。

HashTable 实现了一个字典,并且不保留插入的总顺序,因为具有不同哈希值的插入映射到不同的链。在使用链接的字典实现的情况下,具有冲突哈希的键存储在链表中(如问题中所述),并且确实按插入顺序进行维护。存在许多不具有此属性的字典的其他(更快)实现。请参阅thees lecture 注释以讨论开放寻址(一种不保留碰撞元素插入顺序的字典实现模式)。特别是使用双散列的开放式寻址不会对存储在键集中的元素施加任何顺序。

【讨论】:

【参考方案2】:

因为是这样设计的,所以试试LinkedHashSet

【讨论】:

以上是关于为啥哈希表不保持插入顺序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

redis哈希值是否保持插入顺序[重复]

哈希表和键顺序

哈希表哈希桶的实现

哈希表及其常用算法(代码实例)

哈希表 v 自平衡搜索树

hash哈希