zoukankan      html  css  js  c++  java
  • HashMap原理分析

    HashMap 实现Map、Cloneable、Serializable接口,继承AbstractMap基类。

    HashMap map = new HashMap<String,String>();

    实例化一个HashMap,在构造参数中,设置了默认的loadFactor(DEFAULT_LOAD_FACTOR,负载因子,初始值float类型,0.75),内部Entry的数组大小DEFAULT_INITIAL_CAPACITY(默认容量,初始值int类型16)。
    设置负载因子,设置阀值(threshold = loadFactor * CAPACITY),创建Entry内部数组,数组的大小按照2的次幂设置。
    在容量参数必须设置为2的N次方,用来防止Hash碰撞。

    • .put : 对key进行hash,通过hash值传到indexFor中计算新的K-V值存放数组的位置。
      在put的时候发现Entry数组不够的情况会按照2*当前容量来进行扩容,resize方法,原来的数据需要做重新hash运算。
    • .get:对key进行hash,通过得到的hash值闯到indexFor中计算K-V值存放数组的位置。
    • .resize: 当元素实际大小大于等于阀值的时候,按照Entry数组的2倍容量重新定义一个新的数组。然后将旧的Entry重新hash,indexFor存入新的Entry数组。
  • 相关阅读:
    Uva11584 Partitioning by Palindromes
    GYM100741 A Queries
    Uva11400 Lighting System Design
    UVA12563 Jin Ge Jin Qu hao
    Uva116 Unidirectional TSP
    HDU2089 不要62
    BZOJ3670: [Noi2014]动物园
    Uva11384 Help is needed for Dexter
    Uva1347 Tour
    BZOJ1924: [Sdoi2010]所驼门王的宝藏
  • 原文地址:https://www.cnblogs.com/liushijie/p/4711698.html
Copyright © 2011-2022 走看看