zoukankan      html  css  js  c++  java
  • HashMap数据结构与实现原理解析(干货)

    HashMap 数据结构解析:

    • HashMap内部使用hash表(本质是一个数组见图一)

    • HashMap使用hash算法计算得到存放的索引位置,以此来加快查询速度,(比ArrayList还要快)

    • 同样的既然本质是数组则少不了扩容和复制数据的问题了,这与ArrayList的缺点是一样的

    • hash值相同不能表示key完全相同,需要调用equals再次确认

    • 如果key的hash值相同但是equals判断不相同,那么使用树结构或者链表来存储这些hash相同的元素,(具体使用哪种根据当前map中元素的数量,超过64个元素则使用树结构)

    hash表的本质:

    image-20191126123312490

    获取元素方法:

    image-20191126123117994

    存储元素方法:

    image-20191126134535014

    存储元素方法补充:

    代码在putVal方法的最后,当添加元素后的表的长度超过阈值时则直接扩容hash表

    image-20191126135920717

    扩容/转换方法:

    image-20191126130936107

    总结:

    • HashMap是使用Hash表(本质是数组)来存储数据,

    • 当key的Hash值相同但是equals判断不同时使用链表(添加快,查询慢)

    • 当元素数量超过64时则将链表转为树结构(添加慢,查询快)

  • 相关阅读:
    C# 实现类库并调用
    C# pictureBox.Image获得图片的三种方法
    C# 指针使用总结
    C++ 怎样让函数返回数组
    C# 枚举与位枚举(Enum)
    Labview调用C#动态链接库dll
    C# partial 作用
    C# Internal关键字小结
    C# => 运算符
    C# 中 ??、 ?、 ?: 、?.、?[ ]
  • 原文地址:https://www.cnblogs.com/yangyuanhu/p/11935040.html
Copyright © 2011-2022 走看看