1、序列化
2、java异常处理规范
通过源码可以发现,hashMap的数组长度一定保持2的次幂,这样做有什么好处呢?
//根据Hash值和Hash表的大小选择合适的Hash桶
static int indexFor(int h, int length) {
return h & (length-1);
}
如果length为2的次幂,其二进制表示就是100….0000;则length-1 转化为二进制必定是0111….11的形式,在于h的二进制与操作效率会非常的快,而且空间不浪费;如果length不是2的次幂,比如length为15,则length-1为14,对应的二进制为1110,再于h与操作,
最后一位都为0,所以0001,0011,0101,1001,1011,0111,1101这几个位置永远都不会存放元素了,空间浪费相当大,更糟的是这种情况中,数组可以使用的位置比数组长度小了很多,这意味着进一步增加了碰撞的几率,减慢了查询的效率!这样就会造成空间的浪费。
1372

被折叠的 条评论
为什么被折叠?



