据我所知,Java Collections API中唯一按插入顺序对条目进行排序的Map实现是LinkedHashMap
,它主要用于链接列表。
为什么没有像ArrayMap
这样的东西在内部使用数组或ArrayList
?在地图中,将ArrayList
和LinkedList
分开的区别不再重要了吗?还是我错过了一些使该数据结构总体上不好的东西?如果是这样的话,LinkedHashMap
是我要插入顺序的唯一实现Java标准库中Map实现的选项吗?
答案 0 :(得分:1)
HashMap已经是基于数组的数据结构。当您插入一个条目时,键将被散列,并且确切的索引是通过压缩散列来计算的。然后将该条目放在该索引处。
从HashMap制作LinkedHashMap所需的额外部分是,LinkedHashMap的条目也包含前一个和下一个指针。
制作基于数组的LinkedHashMap将需要将所有条目移回一个索引,以便为前面的新条目创建空间,从而有效地使其成为O(n)操作,这在当前的O(1)中发生实施。
答案 1 :(得分:0)
Map
接口为地图中的每个条目公开Map.Entry
对象。这迫使Map
实现实际上具有那些对象,然后可以轻松地将它们链接在一起形成双向链接列表。
此外,当将条目从映射中删除时,需要将其从插入顺序列表中的任何位置删除,这在链接结构中比在数组中执行的效率要高。显而易见的方式。
这两种方法都是可修复的,并且可以制作Map
来维持由数组支持的插入顺序,但这会有点复杂,并且没有任何好处。