• 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碰撞概率增大,查询效率变慢;如果设置的太小,则空间利用率太低,浪费空间
  • 相关阅读:
    安装SQL Server驱动到Maven仓库[转]
    Nuget 摘录
    删除除了Src属性以后的全部属性
    执行NET 命令无法使用超过20个字符的组名或用户名
    在EntityFramework中使用 nock的方法。
    两代码的区别
    SQLServer 执行计划
    win7电脑的账户被禁用了怎么办
    win10防火墙损坏如何修复
    win10摄像头在哪打开?
  • 原文地址:https://www.cnblogs.com/yinchh/p/12729360.html
Copyright © 2020-2023  润新知