单阶hash和多阶hash实现:
单阶算法 vs 多阶算法优缺点:
1.单阶算法的典型实现是HashMap结构,他可以动态扩容,由于他除了hash冲突时使用的是红黑树,所以最坏情况下查找和插入元素时间复杂度是O(logN),缺点是非数组实现,不容易序列化到磁盘上
2.多阶算法的缺点是容量是初始化是就固定的,每一阶的元素数量在初始化是就已经确定,原则上是比上一阶质数小的最大质数,以六阶为例:97,89,83,79,73,71 , 多阶数组的另一个缺点是可能存在找不到空闲坑位的情况,比如每一阶都冲突,导致没有坑位可放置元素,这种情况非常罕见,不过一旦出现,只能对外报错,由调用方进行处理,所以使用多阶数组时需要监控数组坑位的使用情况,如果发现使用了超过70%要提前扩容,多阶数组可以通过一个一维的数组,比如0-N存放第一阶元素,N+1 - N+M存放第二阶元素,N+M+1 - N+M+S存放第三阶元素的形式来实现,这样的数组结构非常容易序列化到磁盘中,而且非常容易从磁盘反序列化回来
总结:多阶数组最大的问题在于可能会存放不下元素,所以实际中我们可以结合两个算法的优点实现一个整体的对外结构:先把元素存放到多阶数组中,如果多阶数组放不下,再把这个元素放在单阶算法的HashMap中,单阶HashMap起到一个兜底的作用