美文网首页
HashMap 理解

HashMap 理解

作者: 大盗海洲 | 来源:发表于2019-06-13 17:16 被阅读0次

    参考链接:
    HashMap原理深入理解
    java中HashMap原理?面试?你是谁,你在哪

    HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。

    数组:存储区间连续,占用内存严重,寻址容易,插入删除困难;
    链表:存储区间离散,占用内存比较宽松,寻址困难,插入删除容易;
    Hashmap综合应用了这两种数据结构,实现了寻址容易,插入删除也容易。

    image.png

    HashMap中hash函数怎么是是实现的

    image.png

    解决 hash 冲突的常见方法

    a. 链地址法:将哈希表的每个单元作为链表的头结点,所有哈希地址为 i 的元素构成一个同义词链表。即发生冲突时就把该关键字链在以该单元为头结点的链表的尾部。

    b. 开放定址法:即发生冲突时,去寻找下一个空的哈希地址。只要哈希表足够大,总能找到空的哈希地址。

    c. 再哈希法:即发生冲突时,由其他的函数再计算一次哈希值。

    d. 建立公共溢出区:将哈希表分为基本表和溢出表,发生冲突时,将冲突的元素放入溢出表。

    HashMap 就是使用链地址法来解决冲突的(jdk8中采用平衡树来替代链表存储冲突的元素,但hash() 方法原理相同)。数组中的每一个单元都会指向一个链表,如果发生冲突,就将 put 进来的 K- V 插入到链表的尾部。

    相关文章

      网友评论

          本文标题:HashMap 理解

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