HashMap面试题的整理归纳
1、什么是HashMap
HashMap是用户快速存取key-value键值对的map集合,key和value都允许为null,key不可重复,若key重复则被覆盖
HashMap是异步,线程不安全且无序的
2、HashMap的底层原理
在JDK1.8之后采用的是数组+链表+红黑树的数据结构
通过put和get存储和获取对象。当我们给put()方法传递键和值时,先对键做一个hashCode()的计算来得到它在bucket数组中的位置来存储Entry对象。当获取对象时,通过get获取到bucket的位置,再通过键对象的equals()方法找到正确的键值对,然后在返回值对象。
3.谈一下hashMap中get是如何实现的?
对key的hashCode进行hashing,与运算计算下标获取位置,如果在桶的首位上就可以找到就直接返回,否则在树中找或者链表中遍历找,如果有hash冲突,则利用equals方法去遍历链表查找节点。
4.谈一下当两个对象的hashCode相等时会怎么样?
会产生哈希碰撞,若key值相同则替换旧值,不然链接到链表后面,链表长度超过阙值8就转为红黑树存储
5.如果两个键的hashcode相同,你如何获取值对象?
HashCode相同,通过equals比较内容获取值对象
6."如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办?
超过阙值会进行扩容操作,概括的讲就是扩容后的数组大小是原数组的2倍,将原来的元素重新hashing放入到新的散列表中去。
7.请解释一下HashMap的参数loadFactor,它的作用是什么?
loadFactor表示HashMap的拥挤程度,影响hash操作到同一个数组位置的概率。默认loadFactor等于0.75,当HashMap里面容纳的元素已经达到HashMap数组长度的75%时,表示HashMap太挤了,需要扩容,在HashMap的构造器中可以定制loadFactor。