是否有基于数组的 Map 实现



我所知,Java Collections API 中唯一按插入顺序对其条目进行排序的 Map 实现是 LinkedHashMap ,它维护链表。

为什么没有像ArrayMap这样在内部使用数组或ArrayList的东西?将ArrayListLinkedList分开的差异在地图中是否不再重要?还是我错过了一些使这种数据结构通常成为一个坏主意的东西?如果是这种情况,如果我想要插入顺序,LinkedHashMap 是我在 Java 标准库中实现 Map 的唯一选择吗?

HashMap 已经是一种基于数组的数据结构。插入条目时,将对键进行哈希处理,并通过压缩哈希来计算确切的索引。然后将条目放在该索引中。

从HashMap制作LinkedHashMap

所需的额外部分是LinkedHashMap的条目也包含上一个和下一个指针。

制作一个基于数组的 LinkedHashMap 将需要将所有条目移回一个索引,以便为前面的新条目创建空间,有效地使其成为 O(n( 操作,这在当前实现的 O(1( 中发生。

Map 接口公开映射中每个条目的Map.Entry对象。 这迫使Map实现实际上具有这些对象,然后可以轻松地将它们链接在一起形成双向链表。

此外,当一个条目从映射中删除时,需要从插入顺序列表中的任何位置删除它,如果你以明显的方式这样做,这在链接结构中比在数组中更有效。

这两件事都是可以修复的,并且可以制作一个由数组支持的维护插入顺序的Map,但它会稍微复杂一些,而且没有任何优势。

最新更新