• 105454

    文章

  • 803

    评论

  • 12

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

HasMap总结

撸了今年阿里、腾讯和美团的面试,我有一个重要发现.......>>

一.HashMap特性:

  1. HashMap实现快速存取,键值对允许为Null,key重复就覆盖
  2. HashMap线程不安全
  3. 底层是hash表,不保证有序性

二.HashMap底层原理:

基于hashing的原理,jdk8后采用数组+链表+红黑树的数据结构。我们通过put和get存储和获取对象。当我们给put()方法传递键和值时,先对键做一个hashCode()的计算来得到它在bucket数组中的位置来存储Entry对象。当获取对象时,通过get获取到bucket的位置,再通过键对象的equals()方法找到正确的键值对,然后在返回值对象。

三.HashMap内部结构图:

四.HashMap中put()方法的实现:

  1. 计算关于key的hashcode值
  2. 如果散列表为空时,调用resize()初始化散列表
  3. 如果没有发生碰撞,直接添加元素到散列表中去
  4. 如果发生了碰撞(hashCode值相同),进行三种判断
    4.1:若key地址相同或者equals后内容相同,则替换旧值
    
    4.2:如果是红黑树结构,就调用树的插入方法
    
    4.3:链表结构,循环遍历直到链表中某个节点为空,尾插法进行插入,插入之后判断链表个数是否到达变成红黑树的阙值8;也可以遍历到有节点与插入元素的哈希值和内容相同,进行覆盖。

     

  5. 如果桶满了大于阀值,则resize进行扩容


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

0条评论

Loading...


自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客