主要问题点:
hashmap的底层结构是什么样的?
新增数据时是怎么判断发生的hash冲突,以及如何解决的?
判断当前确定的索引位置是否存在相同hashcode和相同key的元素,如果存在相同的hashcode和相同的key的元素,那么新值覆盖原来的旧值,并返回旧值。
如果存在相同的hashcode,那么他们确定的索引位置就相同,这时判断他们的key是否相同,如果不相同,这时就是产生了hash冲突。
红黑树的形成条件以及红黑树的概念?
为什么数组长度为2的倍数?有什么好处?如果不是2的倍数会怎么样?
--与按位与计算有关,只有是2的倍数的情况下,可以最大程度避免发生冲突。
总结来说,就是hash&(n-1)这个计算有关。如果不为n不为2的n次方的话,那转换为二进制情况下,n-1就会有某一位为0,那与hash做了&运算后,该位置永远为0,那么计算出来的数组位置就永远会有某个下标的数组位置是空的,也就是这个位置永远不会有值。
是否是线程安全的?想要线程安全的map怎么办?