hashmap和linkedhashmap底层原理
HashMap和LinkedHashMap都是Java中常用的Map集合实现类。
HashMap底层原理:
HashMap底层是通过一个数组和链表实现的。具体来说,HashMap内部有一个Node数组,每个数组元素都是一个链表的头节点。当向HashMap中添加一个键值对时,HashMap会根据键的哈希值确定这个键值对在数组中的位置,然后将这个键值对添加到对应位置的链表中。如果遇到哈希冲突(即不同的键计算得到的哈希值相同),则会采用链表法解决冲突,即将冲突的键值对直接加入到链表中。当链表长度超过一定阈值(默认是8)时,链表会转变为红黑树,以提高查询效率。在进行查询操作时,HashMap会根据键的哈希值到对应的链表或红黑树,然后遍历链表或红黑树来查对应的值。
LinkedHashMap底层原理:
LinkedHashMap继承自HashMap,它在HashMap的基础上增加了一个双向链表来维护键值对的顺序。在向LinkedHashMap中添加键值对时,除了要执行HashMap的添加操作外,还会在
双向链表的尾部添加一个新的Entry节点,用于记录添加的键值对。这样,当遍历LinkedHashMap时,可以按照键值对的添加顺序来遍历。在LinkedHashMap中,可以选择按照插入顺序遍历,也可以选择按照访问顺序(即最近访问的键值对排在最前面)来遍历。
总结:
数组和链表HashMap和LinkedHashMap都是通过一个数组来存储键值对,HashMap使用链表法来解决哈希冲突,而LinkedHashMap在此基础上增加了一个双向链表来维护键值对的顺序。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论