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吗) , 不是 , 接着下去

  • 相关阅读:
    Qt Creater更改默认构建目录
    QT-无法定位程序输入点解决方案
    Qt qmake报错(TypeError: Property 'asciify' of object Core::Internal::UtilsJsExtension)
    python学习--交互式图形编程实例二
    python学习--交互式图形编程实例一
    python学习--面向对象程序设计实例
    python学习--面向过程程序设计实例
    python学习--程序设计方法实例一
    python学习--字典操作实例二
    python学习--文档
  • 原文地址:https://www.cnblogs.com/cs-lcy/p/8391698.html
Copyright © 2011-2022 走看看