hashmap的原理,内部数据结构
底层使用哈希表(数组+链表),当链表过长会将链表转成红黑树以显示O(logn)时间复杂度内查找
hashmap中hash函数是怎么实现的,还有哪些hash的实现方式
1. 高16位不变,低16位和高16位做一次异或操作
2. (n-1)&hash -->得到下标
hashmap插入数据的过程:
先通过hash函数计算出索引值,再通过索引值找到在数组中的位置,如果该位置上没有数据,则放入,
如果有值的话,遍历在该位置的整个链表,如果链表中有的话,就复写,
没有的话就采用头插法将数据插入头部,同时将原来的数据链接到新的值上。
hashmap扩容机制:(能部分解决性能问题)
首先new一个两倍大小的数组,
其次遍历旧数据的item,将其编程游离态,直接放入到新的数组中。
如果对应的位置没有值的话,直接赋值,
如果有值的话,直接将值变成头节点,以前的数据变成子节点。