zoukankan      html  css  js  c++  java
  • 探寻hashmap

    Hashmap源码

    1、  构造器:

      a)获得默认数组大小:1>>4 :16

      b) 获得负载因子:0.75:衡量hashmap的空间使用程度

                            i.过大:使用空间更加充分,但是查找效率变低,即时间复杂度变大

                           ii.过小:hashmap数据过于稀疏,造成空间浪费,即空间复杂度变大

      c)创建数组

    2、  Put()方法:使用key的hash算法,计算出可key的存储的数组位置,确定key的位置后相应的value也会确定,如果数组位置已经有数值存在,则以第一个值为链头以链表形式存储。

    3、  Get()方法:计算出key的hashcode值,然后去寻找

    4、  Resize()方法:如果需要的存放的存储空间大于默认数组大小*负载因子的乘积,那么就发生扩容,扩大为原来的两倍

    5、  问题:

      a)为什么hashmap的容量总是2的次方

                            i.因为hashmap中有一个方法是h&table.length-1,这样可以减少碰撞概率。

                           ii.例子: 8&14  9&14 与  8&15  9&15 15不会发生碰撞 14会发生碰撞,这是一会我数学概率问题。

      b) 可以的话建议使用hashmap的clear方法循环使用hashmap

                            i.应为hashmap是强引用类型,原有不适使用的hashmap不会被jvm回收,可能造成内存泄露

     高并发的hashmap

    1、  情况(1.7):内部链表遭到破坏,发生链表成环,造成死循环,cpu飙升

    2、  解决:1.8 引入两个指针声明 确保顺序

    确保hashmap线程安全

    1、  方法

      a)使用collections.synchronizedmap方法

      b) 使用concurrenthashmap并发集合类代替

  • 相关阅读:
    HTML Strip Char Filter
    Creating a custom analyzer in ElasticSearch Nest client
    elasticsearch-analysis-pinyin
    ElasticSearch安装拼音插件 elasticsearch-analysis-pinyin
    Elasticsearch5.4 删除type
    Performs the analysis process on a text and return the tokens breakdown of the text
    Elasticsearch 5 Ik+pinyin分词配置详解
    线性可分支持向量机--SVM(1)
    感知机分类(perceptron classification)
    创建DateFrame的常用四种方式
  • 原文地址:https://www.cnblogs.com/chenzhuantou/p/10150062.html
Copyright © 2011-2022 走看看