• (惊艳)hashmap的理解(映射)


    第一:

    hashmap在内存中是长这样的,数组+链表的形式

     // HashMap采用链表法解决冲突,每一个Entry本质上是一个单向链表
        transient Entry[] table;  
    

      

    第二:  put方法

    当我们往hashmap中put元素的时候,先根据key的hash值得到这个元素在数组中的位置(即下标),然后就可以把这个元素放到对应的位置中了。如果这个元素所在的位子上已经存放有其他元素了,那么在同一个位子上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾

    找到了数组下标为15的位置,如果没有元素的话,就可以把[key,value]捆绑在一起的键值对(“key-value”插入

    放入进去,引用别人话::map中存储的是键值对

    可以看到每一个数据对象是由(hash值,key,value,next)四个属性组成的

    如果有对象的话,将这个对象插入到链表的头部

    从映射的角度看,多个key可以映射到同一个数组下标中去,所以查找的时候不能一一映射,一个下标可能对应几个数据对象{hash,key,value,next}


    第三:get方法

    从hashmap中get元素时,首先计算key的hashcode,找到数组中对应下标

    如果没元素查找失败

    如果有元素的话,然后对这个链表做线性查找,

    然后通过key的equals方法在对应位置的链表中找到需要的元素。

    判断第一个存在的节点的key是否和查询的key相等。如果相等,直接返回该节点。

     比如  {"name","lcy"}   ->  {"age,25"}  这个键值对是这么排列的,只传递进来key的数据是“age”  

    然后age.equals(第一个key,name吗) , 不是 , 接着下去

  • 相关阅读:
    IDEA使用Git传放项目
    前端自适应知识点
    数据可视化
    vue调用Moment显示时间
    java判断通常的逻辑
    java常用的逻辑
    java匿名内部类练习
    java 匿名内部类
    java 内部类定义在局部时需要注意的情况
    java内部类的定义原则
  • 原文地址:https://www.cnblogs.com/cs-lcy/p/8391698.html
Copyright © 2020-2023  润新知