zoukankan      html  css  js  c++  java
  • (惊艳)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吗) , 不是 , 接着下去

  • 相关阅读:
    LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别
    Linq扩展方法之All 、Any
    Linq扩展方法之Aggregate 对序列应用累加器函数
    C#开发的进化史
    C#选择文件、选择文件夹、打开文件(或者文件夹)
    XPath操作XML文档
    文档对象模型操作xml文档
    XML简介
    php获取某经纬度附近地点位置
    Yii中实例化类的四种方式
  • 原文地址:https://www.cnblogs.com/cs-lcy/p/8391698.html
Copyright © 2011-2022 走看看