HashMap是现在面试必问的一个集合,在工作中会经常使用到,所以不管为了应付面试还是工作,我们都需要对它有个很深的理解。
下面是我在面试过程中对如何回答HashMap的面试进行的概要点整理;用于记录及以后回顾;具体的原理和源码可以参考网上大多数资料。
一般面试官会问,说说你对HashMap的理解和原理?
回复的点有:
1、键值对 Key/Value
2、数据结构数组+链表
3、put调用hashCode方法生成hash值
4、get调用equals方法返回值
然后面试官会继续引出Hash碰撞问题并让说下HashMap是如何解决优化这个问题的?
回复的点有:
1、扩容
2、数据结构的链表
初始的容量是16
针对扩容需要说出2n,也就是2的倍数扩容,这里最好说下扩容因子也就是0.75f
链表是如果出现Hash碰撞,将在链表后追加
可能最后面试官会抛出一个问题就是如果出现大数据量放入HashMap中将会出现什么情况?
1、性能效率低
2、出现大量的Hash碰撞
这里还有一个点是HashMap有一个最大的容量1<<30
/** 默认容量 */
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;