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

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

【问题讨论】:

标签: java collections


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-17
      • 2010-12-26
      • 1970-01-01
      • 2010-11-28
      • 2014-02-01
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多