如果散列表是一个链表元素数组,而散列代码是数组中元素的索引,那么为什么散列表不能保持插入顺序?
答案 0 :(得分:1)
简而言之,哈希表(字典)不保持插入的总顺序,因为它不需要。抽象数据类型支持ammortized O(1)插入,删除和搜索,但不支持枚举,并且不对键集中的元素强加任何顺序。
HashTable实现字典,并且不保留插入的总顺序,因为具有不同散列值的插入映射到不同的链。在使用链接的字典实现的情况下,具有冲突哈希的密钥存储在链表中(如问题中所述),并且确实按插入顺序维护。存在许多没有此属性的其他(更快)字典实现。有关开放寻址(不保留冲突元素的插入顺序的字典实现模式)的讨论,请参阅thees lecture注释。特别是,使用双重散列打开寻址不会对存储在密钥集中的元素施加任何顺序。
答案 1 :(得分:0)
因为它是这样设计的,所以请尝试LinkedHashSet