为什么HashMap不保证地图的顺序会随着时间的推移保持不变

Wat*_*att 8 java hashmap

我在这里阅读Hashmap和Hashtable之间的区别:http://javarevisited.blogspot.sg/2010/10/difference-between-hashmap-and.html

任何人都可以说明为什么它会跟随?

"5. HashMap不保证地图的顺序会随时间保持不变."

在重新散列期间订单是否会发生变化,这是为什么?

如果你能指出资源或集合列表,表现出不保证秩序保持不变的行为,那也很好.

AFIK,ArrayList提供了这样的保证(如果我错了,请告诉我)

编辑:'地图顺序'=可能是输入键或值的顺序.

Jea*_*art 11

一个HashMap中没有秩序-在任何时间.它实际上并不用于此目的.即使没有重复,订单也可能会改变.

如果您需要使订单保持不变,请使用 LinkedHashMap

  • 他是对的,但由于实施,这才是真的.没有什么能保证它永远是真的. (3认同)
  • 尝试将0到10添加到HashSet,它将按排序顺序.:0 (2认同)
  • 这不是问题的任何答案。问题是为什么没有顺序呢?实施中的哪些内容导致订单发生变化? (2认同)

Pet*_*rey 5

散列策略的要点是以伪随机方式放置对象.它这样做是为了在大多数情况下,只有一个键/元素将被散列到给定的桶.这允许O(1)查找时间.当HashMap或Hashtable增长时,桶的数量改变,键/元素以另一种伪随机方式放置.

最简单的解决方案是使用LinkedHashMap.这将保持添加顺序或可选的上次访问顺序.我更喜欢使用这个集合,因为它可以使调试变得更容易,因为我可以预测对象可能在哪里,有时添加对象的顺序可能是有用的信息.

BTW如果您对多少订单感兴趣,那么少量密钥可以在哈希集合中包含元素顺序