首先浅浅说一下hashMap的存放数据的格式
存储形式:Key value形式
哈希--hash---散列 写少读多
然后我们开始谈一谈hashMap存储的原理
复合数据结构,数据少的时候链表和数组 + 数据多的时候红黑树的数组
时间复杂度 每一次取数据O(1) , 大多数每一次插入数据O(1) ,理论上增删改查都是O(1)
HashMap数据少的时候 以数组+链表的形式存储 数据多的时候红黑树的数组存储的原理?
假定对每个数对8求余,然后放入相应的位置,数据相同会形成一个链表
当链表长度超过8之后,就会变成了红黑树的结构,但是当红黑树的数量有限制,时间复杂度也是O(1),如果数量没有上限的话,增删改查的时间复杂度从O(1)变成了O(logN)。
当有限制的时候,规定的总量满了或者红黑树满了,就需要扩容。两种扩容机制,总量扩容或者单个扩容
那么如何让增删改查时间复杂度变成O(1),当数据总量满了之后,对现有的数组进行扩容,然后每个数放入的位置重新进行计算哈希,这样的话进行增删改查的时间复杂度又变成了O(1)。
但是扩容之后重新计算的那一次插入时间复杂度O(n),大多数还是O(1),平均下来O(logn),这样虽然降低了增的时间复杂度,但是这样做删改查都做到了时间复杂度O(1),所以一次性写入大量数据,之后不再插入新的数据,只提供查询,这样的增删改查都是O(1)。所以说是写少读多
这个图就是存储的形式