0%
- 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:填充因子