java中的HashMap和linkedHashMap的底层实现

1>HashMap的底层实现

           a:底层的实现是散列表(数组+链表)

           b;put 操作时,首先会根据key进行hash(key)计算出在数组中的存储位置,如果该位置已经存在其他元素,将之前脸链表的数据往后推,该操作可能存在hash冲突,不同key的值,通过hash函数得到相同的index,采用链表的方式进行存储,相同key的值,得到相同的hash值,直接进行覆盖,

        c:为了减少hash冲突,尽量使用hashmap的长度设置为2的次幂

         d:在进行put操作的时候,首先会经过hash(key)计算出数据在数组中的存储索引,如果该index下只有一个元素,直接拿取返回,如果该索引下有多个元素,将该链表进行迭代,通过equals方法比较获取

      f:初始容量是16,load factor是0.75,即扩容的临界值为:16*0.75=12,在进行扩容的时候,容量会变为原来额1倍,然后会重新计算key的hash函数,在数组中重新定位,这样是非常消耗性能的,为避免这样的情况,应该尽量预知hashmap中的元素个数

  

2>linkedhashmap的底层原理:

    1>底层的数据结构(数组+双向链表)

    2>该在遍历的过程中,如果accessirder设置为true的时候,采用lru最近最少使用算法进行遍历,否则按照插入顺序进行遍历

3>hashmap和linkedhashmap的区别

     1>底层的数据结构:hashmap(数组+单链表)  linkedhashmap(数组+双向链表)

      2>在进行遍历的过程中hashmap无序,linkedhashmap可按照插入顺序进行遍历,且linkedhashmap在查找元素时候,可基于双向链表双向查找,效率更高,但是在存储上面需要浪费更多的存储空间,空间换时间的思想

   

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值