在面试中,面试官为什么会经常问HashMap呢?
首先,HashMap在编程过程中使用的频率非常高,所以会考察对它的掌握程度。
其次,HasHMap涉及的知识面非常广泛,它涉及了数组,链表,红黑树,哈希算法等知识点,通过它可以很好的考察被面者的基础知识。
HashMap是用来存储Key-Value键值对的一种集合,这个键值对也叫Entry。
JDK1.7中,HashMap是通过数组+链表来实现的,而到了JDK1.8则是数组+链表+红黑树实现,下边内容主要是针对JDK1.8版本的HashMap。
先看一下HashMap的数据结构图:
HashMap的几个关键属性:
/**
* 默认初始容量 - 必须是 2 的幂。
*/
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
/**
*最大容量
*/
static final int MAXIMUM_CAPACITY = 1 << 30;
/**
* 负载因子
*/
static final float DEFAULT_LOAD_FACTOR = 0.75f;
/**
*节点上链表转换为红黑树的阀值
*/
static final int TREEIFY_THRESHOLD = 8;
/**
* 红黑树退化为链表的阀值
*/
static