4.23Java HashMap底层实现

4.23Java HashMap底层实现

HashMap底层数据结构

HashMap底层实现采用了哈希表,哈希表是一种非常重要的数据结构

哈希表的基本结构

本质上就是数组+链表

数组的特点:
  • 占用空间连续

  • 寻址容易

  • 查询速度快

  • 增加和删除效率低

链表的特点:
  • 占用空间不连续

  • 寻址困难

  • 查询速度慢

  • 增加和删除效率非常高

哈希表就是结合了数组的优点和链表的优点

HashMap源码关键点

  • 一个Entry节点数组---核心数组(位桶数组)

  • Node里面描述了每个节点里面存着什么内容:

    • hash值

    • key值

    • value值

    • 下一个节点

上述是1.6的源码

JDK8以后将hashmap又做了优化---数组+链表+红黑树

hashmap存储原理:

HashMap键值对转换过程:

  1. 当创建了一个键对象和一个值对象的时候:

    1. 会调用Object类里面的hashcode方法---本地方法,底层是C语言写的

    2. 生成一个对应的hashcode码

  2. 通过hashcode的值结合可自写的hash算法算出---hashcode值和位桶数组的索引的对应关系

  3. 然后根据算hashcode转换成的位桶数组的索引值将对象放入位桶数组中

    1. 如果两个hashcode值算出的索引一致

    2. 在第一个对象后用next指向第二个对象---hashmap的结构

    3. hashmap结构如图:

      1. 用next进行指向

整个存储过程是:

在这个过程当中可以进行优化的点:---hashcode转换成索引下标的算法优化

散列码---让位桶数组利用效率更高

在JDK1.8之后hashmap的结构变成了:数组+链表+红黑树的结构,后面再详细说明(待查阅资料)

posted @ 2021-04-23 19:52  俊king  阅读(83)  评论(0)    收藏  举报