LinkedHashMap和HashMap是常用Java集合框架,下面详解LinkedHashMap和HashMap的区别@mikechen
保序性的区别
HashMap: 在HashMap中键值对的存储是无序的,遍历HashMap时,元素的顺序是不确定的,因为它取决于哈希码的分布情况和数组的大小。
LinkedHashMap: LinkedHashMap通过维护一个双向链表来保留键值对的插入顺序,无论何时插入一个新的键值对,它都会被放置在链表的末尾,从而可以保证遍历时的顺序与插入顺序一致。
内部实现的区别
HashMap数据结构:基于哈希表,使用哈希函数将键映射到数组索引,以实现高效的存储和查找操作。
如下图示:
它使用哈希函数将键映射到数组索引,如果存储有冲突,直接挂链表,JDK1.8链表长度超过8,直接转红黑树。
LinkedHashMap在HashMap的基础上,使用了一个双向链表来维护键值对的插入顺序。
如下图所示:
LinkedHashMap继承了HashMap类,它的多种操作都是建立在HashMap操作的基础上的,只是在原来的单链表的基础上改成了双向链表。
LinkedHashMap这样做的目的是为了让它能够实现插入数据的排序。
性能和复杂度
HashMap: HashMap在理想情况下可以在O(1)的时间复杂度内执行查找、插入和删除操作,但在最坏情况下,例如哈希冲突严重时,性能可能下降为O(n)。
LinkedHashMap: LinkedHashMap相比于HashMap,因为需要维护插入顺序,所以在执行查找操作时,可能会稍微慢一些。
应用场景
如果你需要存储键值对,并且对键值对的顺序要求不高,或者对性能要求较高,可以选择使用HashMap。
如果你需要保留键值对的插入顺序,或者对键值对的顺序有明确的要求,可以选择使用LinkedHashMap。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》