Java如何对HashMap或HashTable中的项目进行排序?
我想知道Java在添加时如何对( 或 )中的项目进行排序。密钥是按哈希码、内存引用还是按分配优先级排序...?Map
HashMap
Hashtable
这是因为我注意到相同的对并不总是以相同的顺序排列。Map
我想知道Java在添加时如何对( 或 )中的项目进行排序。密钥是按哈希码、内存引用还是按分配优先级排序...?Map
HashMap
Hashtable
这是因为我注意到相同的对并不总是以相同的顺序排列。Map
java.util.HashMap
是无序的;你不能也不应该假设任何超出这个范围的东西。
此类不保证映射的顺序;特别是,它不保证订单将随着时间的推移而保持不变。
java.util.LinkedHashMap
使用插入顺序。
此实现的不同之处在于,它维护一个贯穿其所有条目的双链表。此链表定义迭代顺序,这通常是将键插入到映射中的顺序(插入顺序)。
HashMap
java.util.TreeMap
,一个排序的地图
,使用键的自然或自定义排序。
地图根据其键的自然排序进行排序,或按地图创建时提供的进行排序,具体取决于所使用的构造函数。
Comparator
首先:具体不提供稳定和/或定义的顺序。因此,您观察到的任何内容都只是一个实现细节,您不得以任何方式依赖它。HashMap
由于有时知道看似随机排序的原因很有用,因此以下是基本思想:
A 具有许多用于存储条目的存储桶(作为数组实现)。HashMap
将项目添加到地图时,将根据其派生的值和 存储桶大小的将该项目分配给存储桶。(请注意,存储桶可能已被占用,这称为冲突。这处理得优雅而正确,但我会忽略描述的处理,因为它不会改变概念)。hashCode
HashMap
整个条目的感知顺序(例如通过迭代 返回)取决于这些存储桶中条目的顺序。Map
每当重新哈希大小时(因为映射超过了其丰满度阈值),则存储桶的数量会发生变化,这意味着每个元素的位置可能会发生变化,因为存储桶位置也是从存储桶的数量派生的。