pol*_*nts 122
java.util.HashMap是无序的; 你不能也不应该假设任何事情.
这个类不保证地图的顺序; 特别是,它不保证订单会随着时间的推移保持不变.
java.util.LinkedHashMap 使用插入顺序.
这种实现的不同之处
HashMap在于它维护了一个贯穿其所有条目的双向链表.此链接列表定义迭代排序,通常是键插入映射的顺序(插入顺序).
java.util.TreeMap,a SortedMap,使用键的自然或自定义顺序.
地图根据其键的自然顺序进行排序,或者
Comparator根据使用的构造函数在地图创建时提供.
Joa*_*uer 18
首先:HashMap特别是不提供稳定和/或定义的排序.因此,您观察到的任何内容都只是一个实现细节,您不能以任何方式依赖它.
因为知道看似随机排序的原因有时很有用,所以这里是基本的想法:
A HashMap具有用于存储条目的多个桶(实现为阵列).
当一个项目被添加到地图时,它会根据从其派生的值hashCode和其中的桶大小分配给存储桶HashMap.(请注意,存储桶可能已被占用,这称为冲突.这是优雅且正确的处理,但我会忽略对描述的处理,因为它不会改变概念).
entires的感知排序(例如通过迭代返回Map)取决于这些桶中条目的顺序.
每当重新定义大小时(因为地图超过其丰满度阈值),则桶的数量改变,这意味着每个元素的位置可能改变,因为桶位置也是从桶的数量导出的.
HashMap根本不排序.对于按键值排序的地图,您应该使用TreeMap.
来自JavaDocs TreeMap:
基于Red-Black树的SortedMap接口实现.此类保证映射将按升序键顺序排序,根据键类的自然顺序(请参阅Comparable)进行排序,或者根据创建时提供的比较器进行排序,具体取决于使用的构造函数.
来自以下文件HashMap:
这个类不保证地图的顺序; 特别是,它不保证订单会随着时间的推移保持不变.
| 归档时间: |
|
| 查看次数: |
68160 次 |
| 最近记录: |