0%

Map接口容器源码分析

  • Map中的key:无序,不可重复,使用Set存储
  • Map中的value:无序,可重复,使用Collection存储
  • 一个key-value键值对构成一个Entry对象(JDK7),Node(JDK8)
  • 键值对无序,不可重复,使用Set存储

HashMap底层实现

JDK8相较于JDK7在底层实现方面不同
  • new HashMap():底层没有创建一个长度为16的数组
  • jdk8底层数组是:Node[]
  • 首次使用put(),创建长度为16数组
  • 数组+链表+红黑树
  • 当数组中某一索引位置元素以链表形式存在的数据个数 > 8,且当前数据长度 > 64时,此索引位置上改为红黑树存储
HashMap源码中重要常量
  • DEFAULT_INITIAL_CAPACITY:HashMap的默认容量,16
  • MAXIMUM_CAPACITY:HashMap的最大支持容量,2^30
  • DEFAULT_LOAD_FACTOR:HashMap的默认加载因子,0.75
  • TREEIFY_THRESHOLD:Bucket中链表长度大于该默认值,转化为红黑树
  • UNTREEIFY_THRESHOLD:Bucket中红黑树存储的Node小于该默认值,转化为链表
  • MIN_TREEIFY_CAPACITY:桶中的Node被树化时最小的hash表容量(当桶中Node的数量大到需要变红黑树时,若hash表容量小于MIN_TREEIFY_CAPACITY时,此时应执行resize扩容操作,这个MIN_TREEIFY_CAPACITY的值至少是TREEIFY_THRESHOLD的4倍)
  • table:存储元素的数组,总是2的n次幂
  • entrySet:存储具体元素的集
  • size:HashMap中存储键值对的数量
  • modCount:HashMap扩容和结构改变次数
  • threshold:扩容临界值 = 容量 * 填充因子
  • loadFactor:填充因子
------ THEEND ------

欢迎关注我的其它发布渠道