zoukankan      html  css  js  c++  java
  • hashmap详解

    hashMap详解

    hashMap也就是存放键值对(key-value)的java集合,每一个键值对叫做Enrty,这些个键值对存放于一个数组当中,这个数组就是hashmap的主干。

    我们主要使用两个方法,put和get

    put方法

    比如hashMap.put("apple",0),

    首先利用hash函数求解apple的hash值,比如求解出来是2,就把Enrty插入到位置为2的数组元素上

    但是数组长度是有限的,所以当index冲突的时候怎么解决呢?使用链表解决这个问题,当冲突的时候将新插入的entry使用头插法插入到链表中

    get方法

    比如要hashMap.get("apple")

    使用hash函数求解key=“apple”的值hash("apple"),可能出现hash冲突,这个时候就顺着链表一个一个查询,找hash值

     

    hashmap的初始长度是多少

    16

    因为hashMap采用位移法来进行hash值的求解

    因为hash函数是hash=hashCode(“key”)&(length-1)

    16-1=15=1111

    这样使用与的位运算hash值仅仅与hashcode的最后四位有关,所以是随机的

    hashMap在高并发情况下可能会出现死锁


     

    在高并发情况下,hashMap需要进行扩容也就是ReSize

    发生Resize有个条件

    hashMap.size>=capacity*loadFactor(默认是0.75)

    hashMap主要做两件事:1.扩容2.ReHash(会出现链表环)

  • 相关阅读:
    js作用域和作用域链
    js 预编译
    什么是匿名函数?
    js控制台显示[object Object]问题
    Freemarker常用内建函数
    java JSONObject转为map
    jQuery属性相关的操作
    基于jQuery的静态工具方法
    FreeMarker关于导入文件
    json数据的读取操作
  • 原文地址:https://www.cnblogs.com/zhangchiblog/p/8413622.html
Copyright © 2011-2022 走看看