zoukankan      html  css  js  c++  java
  • 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的结构变成了:数组+链表+红黑树的结构,后面再详细说明(待查阅资料)

    It's a lonely road!!!
  • 相关阅读:
    软件工程结对编程作业
    软件工程第1次作业
    阅读一篇文章,培养一个习惯
    OpenvSwitch系列之五 网桥特性功能配置
    读《阿里工程师的自我修养》我学到这几点
    OpenvSwitch系列之四 ovs-ofctl命令使用
    OpenvSwitch系列之三 ovs-vsctl命令使用
    python进阶之垃圾回收
    OpenDaylight开发hello-world项目之功能实现
    python进阶之内存模型
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14695392.html
Copyright © 2011-2022 走看看