LinkedHashMap和HashMap区别(4大区别详解)

LinkedHashMap和HashMap区别(4大区别详解)-mikechen

LinkedHashMap和HashMap是常用Java集合框架,下面详解LinkedHashMap和HashMap的区别@mikechen

保序性的区别

HashMap: 在HashMap中键值对的存储是无序的,遍历HashMap时,元素的顺序是不确定的,因为它取决于哈希码的分布情况和数组的大小。

LinkedHashMapLinkedHashMap通过维护一个双向链表来保留键值对的插入顺序,无论何时插入一个新的键值对,它都会被放置在链表的末尾,从而可以保证遍历时的顺序与插入顺序一致。

 

内部实现的区别

HashMap数据结构:基于哈希表,使用哈希函数将键映射到数组索引,以实现高效的存储和查找操作。

如下图示:

LinkedHashMap和HashMap区别(4大区别详解)-mikechen

它使用哈希函数将键映射到数组索引,如果存储有冲突,直接挂链表,JDK1.8链表长度超过8,直接转红黑树。

LinkedHashMap在HashMap的基础上,使用了一个双向链表来维护键值对的插入顺序。

如下图所示:

LinkedHashMap和HashMap区别(4大区别详解)-mikechen

LinkedHashMap继承了HashMap类,它的多种操作都是建立在HashMap操作的基础上的,只是在原来的单链表的基础上改成了双向链表。

LinkedHashMap这样做的目的是为了让它能够实现插入数据的排序。

 

性能和复杂度

HashMap: HashMap在理想情况下可以在O(1)的时间复杂度内执行查找、插入和删除操作,但在最坏情况下,例如哈希冲突严重时,性能可能下降为O(n)。

LinkedHashMap: LinkedHashMap相比于HashMap,因为需要维护插入顺序,所以在执行查找操作时,可能会稍微慢一些。

 

应用场景

如果你需要存储键值对,并且对键值对的顺序要求不高,或者对性能要求较高,可以选择使用HashMap

如果你需要保留键值对的插入顺序,或者对键值对的顺序有明确的要求,可以选择使用LinkedHashMap

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法