zoukankan      html  css  js  c++  java
  • HashMap笔记

    大纲和问题:

    • 核心数据结构,(为什么链表长度大于8后,链表会转红黑树?)
    • 初始化容量为什么是2的指数幂?加载因子为什么是0.75
    • jdk7的hashmap扩容死锁与环链行程分析
    • jdk8扩容优化,如何做到扩容无需rehash
    • ConcurrentHashMap线程安全吗?什么是分段锁?

    笔记:

    • 数据结构:数组+链表+红黑树(>1.7)
      正常的是数组结构,出现hash碰撞则会出现链表,链表长度大于8则会出现红黑树,因为普通链表的查询效率比数组低的多,但是红黑树插入性能很低(左旋右旋,重新着色);为什么是8呢,从概率上来说(泊松分布),同一个位置出现相同的key的概率会越来越低,达到8的时候,已经很低了,这里转红黑树对插入效率影响较小,且可以提高查询效率;
    • 链表的长度>=8链表转红黑树
    • 初始化容量为什么是2的指数幂:hashmap定位使用的是位运算,而位运算比取模效率高得多,为了保证位运算和取模效果相同,容量大小最好是2的指数幂,关键代码:indexFor(hash, table.length)
    • 加载因子为什么是0.75?如果设置为1,则hash碰撞概率增大,查询效率变慢;如果设置的太小,则空间利用率太低,浪费空间
  • 相关阅读:
    潜水员(二维DP)
    开餐馆(OJ 6045)
    石子归并(区间DP)
    庆功会(多重背包)
    JavaScript案例三:动态显示时间
    JavaScript案例二:在末尾添加节点
    JavaScript案例一:Window弹窗案例
    JavaScript BOM对象介绍
    JavaScript模拟函数重载
    MapReduce作业和任务
  • 原文地址:https://www.cnblogs.com/yinchh/p/12729360.html
Copyright © 2011-2022 走看看