面试准备——HashMap原理

作者: So_ProbuING | 来源:发表于2021-04-12 13:36 被阅读0次

    Hash表

    Hash表
    • Hash表的结构就是顺序表+链表的结构
      Hash表(jdk1.7)中内部是HashMapEntry<K,V>[] table 是一个HashMapEntry的数组,
      就是这个HashMapEntry既具备了顺序表的修改查找快的特点,也具备了链表增加删除快的特点。

    HashMapEntry内部类中包含 key value hash next 等成员变量,就是通过这些来实现了顺序表+链表的结构


    HashMap
    • 上图中一个黄色的块代表一个数组,蓝色的连接起来代表一个个列表

    Hash如何保存数据的

    如下图:


    Hash表

    HashMap中的key有什么用?

    • 通过key计算hash值,并且通过算法,转变为数组的index,这样就可以实现快速定位,从而快速查找
    int index = hash & (tab.length-1);
    

    HashMap添加数据的原理

    添加数据时,创建了一个新的HashMapEntry对象

    table[index] = new HashMapEntry<k,v>(key,v,hash,index)
    

    然后将创建的新的节点存入到table数组的对应Index的位置
    如果发现对应Index中已经有了节点,那么再次存储index位置时


    image.png

    当hash运算冲突时,会进行判断,已经存储的值和要存储的值是不是同一个,如果是同一个,就进行覆盖。如果不是同一个

    Hash性能优化

    • 由于超过HashMap的默认大小阈值后会进行扩容,而扩容会频繁遍历数组和链表,所以我们要避免频繁进行扩容,所以我们在创建HashMap的时候要预估一个大小,尽量使得创建的HashMap长度够用
    HashMap hmap = new HashMap(默认大小);
    

    相关文章

      网友评论

        本文标题:面试准备——HashMap原理

        本文链接:https://www.haomeiwen.com/subject/lgnikltx.html