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(会出现链表环)

  • 相关阅读:
    hdu 3367 Pseudoforest
    hdu 2489 Minimal Ratio Tree
    hdu 4009 Transfer water
    poj 3164 Command Network
    hdu 3926 Hand in Hand
    hdu 3938 Portal
    5-26日(面经总结)
    5-25日
    5-21日|5-22日
    5-13日记录|5-14日
  • 原文地址:https://www.cnblogs.com/zhangchiblog/p/8413622.html
Copyright © 2011-2022 走看看