Java如何在HashMap或HashTable中订购商品?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我想知道Java如何在MapHashMapHashtable)添加项目时订购项目。密钥是由哈希码,内存引用还是按分配优先级排序的?

这是因为我注意到相同的对Map不一定是相同的顺序

提问于
用户回答回答于

java.util.HashMap无序; 你不能也不应该承担任何超出这一点的事情。

这个类不能保证地图的顺序; 特别是,它不能保证订单会随着时间的推移保持不变。

java.util.LinkedHashMap 使用插入顺序。

这个实现不同于HashMap它在它的所有条目中维护一个双向链表。这个链表定义了迭代排序,这通常是键被插入映射的顺序(插入顺序)。

java.util.TreeMap,a SortedMap使用键的自然或自定义顺序。

地图根据其按键的自然排序或按Comparator地图创建时提供的顺序排序,具体取决于使用哪个构造函数。

用户回答回答于

首先:HashMap具体提供稳定和/或定义的顺序。所以你观察到的任何事情都只是一个实现细节,你不能以任何方式依赖它。

由于知道表面上随机排序的原因有时很有用,下面是基本思路:

A HashMap有多个存储条目(作为数组实现)。

当一个项目被添加到地图中时,它将根据派生的值hashCode和桶的大小将其分配给一个桶HashMap。(请注意,桶可能已经被占用,这被称为冲突,这是正确和正确的处理,但我会忽略处理描述,因为它不会改变这个概念)。

感知的有序排序(例如通过迭代返回Map)取决于这些桶中条目的顺序。

无论何时大小被重新映射(因为映射超过了它的充满度阈值),那么桶的数量会发生变化,这意味着每个元素的位置可能会发生变化,因为桶的位置也是从桶的数量中导出的。

扫码关注云+社区