• 每日一学--HashMap


    HashMap

    • 内部结构:数组、链表、红黑树
    • 链树互转条件:长度超8转链转树,小6树转链
    • 初始化数组大小默认16,负载因子0.75
    • 扩容:原大小*2
    • hash函数
          static final int hash(object key) {
                int h;
                return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
          }
    
    • 原理:key的hashcode高低16位异或
    • 作用:
      1. 保留数据高低位特征,增加随机性,降低散列冲突
      2. 降低索引范围,方便与length-1用位运算&来计算数组下标(位运算&比取模%性能好)
    • 线程不安全,有覆盖可能:A线程判断节点为空时挂起,B线程写入节点;A恢复后写入节点,将B线程节点覆盖

    线程安全的map

    • HashTable:操作方法加synchronized,锁住整个数组,粒度较大
    • ConcurrentHashMap:分段锁、CAS、volatile、synchronized,仅锁当前节点

    有序的map

    • LinkedHashMap:单链表存储头尾节点;节点增加before和after属性标识前置和后置节点
    • TreeMap:红黑树实现,按key的自然顺序或定义的comprator排序
  • 相关阅读:
    JSON
    什么是Jsonp?
    用border做三角形
    前端模块化
    Web 前端
    前端性能优化
    Ajax的原理
    node.js基础语法
    【真·新手初篇】菜鸟们都戳进来看看(欢迎大神指导)
    2019.11.20 开启一天的工作
  • 原文地址:https://www.cnblogs.com/wod-Y/p/12863207.html
Copyright © 2020-2023  润新知