底层数据结构
两个数组,通常状况下一个为null,另一个通过数组+链表构成哈希表。
还有一个rehashidx用于控制rehash
扩容时机
数组长度为4,当哈希表元素数量等于数组长度时,进行扩容,将数组长度扩容为2倍。
扩容
渐进式rehash
- 创建一个扩容后的新数组,让hash结构同时持有两个数组
- 让rehashidx=0,表示rehash工作开始
rehash期间,每次对字典的增删改查操作,除了执行指定操作外,还会将旧数组中的rehashindex位置上的所有键值对rehash到新数组上;当rehash工作完成以后,rehashindex就会+1;
在渐进式rehash中,如果新增数据,新数据只会加入到新数组中,但是查询的时候先查旧数组,旧数组没有再查新数组。
当旧数组中的所有键值对都被rehash到新数组后,rehashindex就会被置为-1,代表rehash操作结束。
- 旧数组会被释放。
