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碰撞概率增大,查询效率变慢;如果设置的太小,则空间利用率太低,浪费空间
  • 相关阅读:
    找出一个序列中第k大的元素 [快速选择问题]
    选择排序算法分析
    冒泡排序算法分析
    mysql的安装和配置
    Redis 简明教程
    flink-杂记
    redis-list
    bean创建过程
    镜像
    docker-命令
  • 原文地址:https://www.cnblogs.com/yinchh/p/12729360.html
Copyright © 2011-2022 走看看