hashmap
load facotor 负载因子 默认 0.75
为什么是2的倍数,计算机分配内存适合用移位操作:1<<4 (左移4位) 16
pos = key % size 取余,取出的余数即是数组的下标;
数组的成员是1个单链表,当取余后的结果位置已存了节点(这情况称为冲突),那么就把新插入节点放在原最后节点的 next 之后。
这种结构的缺点:查找的时间复杂度高,在每个单链表中要遍历,时间复杂度为 O(n)
改进 1.8 中改为“红黑树”:单链表过长时转换为红黑树,时间复杂度为树的深度
数组是一段连续的内存,可以通过下标快速地定位;缺点是在中间插入/删除节点时,要把后面的元素进行后移/前移。
单链表是next指针指向下个节点,插入/删除节点动作方便,但是查询时需要遍历链表。
1111111111
1111111
hashmap二进制位移运算懵懵懂懂,稍微可以理解。需要深入学习运算符才能吃透
2的倍数:计算机申请内存时,往往都是申请2的倍数,避免内存碎片;提高散列度,减少冲突
源码分析头条
数组容量2的倍数
hashmap总结2
hashmap总结
HashMap数据结构总结1
数据结构——HashMap
数据结构——单链表特点
插入和删除时间复杂度是O(1),查询时间复杂度是O(n)
数据结构-数组的特点
查询时间复杂度是O(1),插入和删除时间复杂度是O(n)
HashMap源码分析之教学大纲