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就可以作为处理英文字符的专用散列表的初始容量
网友评论