HashMap的容量为什么建议是2的幂次方?

2019-07-26  本文已影响0人  魏诚书

HashMap的容量为什么建议是2的幂次方?

这其实不是一个好问题。

首先,HashMap的容量并没有什么“建议”2的幂次方。

这里其实搞混了几个概念

HashMap的基础是桶数组

动态数组在扩容时会以2倍形式扩容,设该数组为A,所需要存储的HashMap表为S

A的基础大小是1的话,它的扩容后的结果是2的次幂来算的

但如果A的基础数值不是1,比如是37,那么A的大小就会是37与2次幂的积

也就是HashMap其实不是问HashMap

容量也不是S表的容量,而是承载S数组A的大小

正常这到题答出这两点就可以了

另外要注意的是HashMap的实现是个大坑,不同语言不同库的处理方式可能各有取舍。要能答出大体重要部分如:

1压缩映射:常见的如除法和MAD方法

2冲突解决:分离地址(众多标准库采用的方法),装填因子再散列等

3专有还是通用等,比如37就可以作为处理英文字符的专用散列表的初始容量

上一篇 下一篇

猜你喜欢

热点阅读