是否有基于数组的Map实现?

时间:2019-03-25 08:41:04

标签: java data-structures collections

据我所知,Java Collections API中唯一按插入顺序对条目进行排序的Map实现是LinkedHashMap,它主要用于链接列表。

为什么没有像ArrayMap这样的东西在内部使用数组或ArrayList?在地图中,将ArrayListLinkedList分开的区别不再重要了吗?还是我错过了一些使该数据结构总体上不好的东西?如果是这样的话,LinkedHashMap是我要插入顺序的唯一实现Java标准库中Map实现的选项吗?

2 个答案:

答案 0 :(得分:1)

HashMap已经是基于数组的数据结构。当您插入一个条目时,键将被散列,并且确切的索引是通过压缩散列来计算的。然后将该条目放在该索引处。

从HashMap制作LinkedHashMap所需的额外部分是,LinkedHashMap的条目也包含前一个和下一个指针。

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

答案 1 :(得分:0)

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

此外,当将条目从映射中删除时,需要将其从插入顺序列表中的任何位置删除,这在链接结构中比在数组中执行的效率要高。显而易见的方式。

这两种方法都是可修复的,并且可以制作Map来维持由数组支持的插入顺序,但这会有点复杂,并且没有任何好处。