关于java:为什么哈希表不能保持插入顺序?

Why a hashtable does not maintain order of insertion?

本问题已经有最佳答案,请猛点这里访问。

如果散列表是链表元素的数组,而散列代码是数组中元素的索引,那么为什么散列表不能保持插入顺序?


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

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


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