关于HashMap,它是咱们使用很是多的集合容器,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。实际上HashMap是一个“链表散列”,以下是它数据结构:数组
HashMap底层实现仍是数组,只是数组的每一项都是一条链。数据结构
在hashMap里有两个重要因子,初始容量(Capacity),加载因子(loadFactor)。性能
这两个参数是影响HashMap性能的重要参数,其中容量表示哈希表中桶的数量,初始容量是建立哈希表时的容量,加载因子是哈希表在其容量自动增长以前能够达到多满的一种尺度(默认是0.75),它衡量的是一个散列表的空间的使用程度,加载因子越大表示散列表的装填程度越高,反之愈小。对象
从源码来看,能够分为如下步骤:blog
HashMap是一个Node类型的数组table,初始化为Null。索引
不过,在JDK1.8后发生了变化接口
版本 | 结构 | table数据类型 | 初始容量 |
---|---|---|---|
jdk7 | 数组+链表 | Entry | 16 |
jdk8 | 数组+链表+红黑树 | Node | 0 |
这两种在容量上的区别是jdk7初始化table时容量为16(饿汉式),而jdk8建立对象时并无初始化,而是第一次添加元素时table初始化为16(懒汉式)。ci