首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

由HashMap的兑现联想到的

2012-08-03 
由HashMap的实现联想到的首先温故一下java.util.HashMap的实现int i indexFor(hash, table.length)stat

由HashMap的实现联想到的
首先温故一下java.util.HashMap的实现

int i = indexFor(hash, table.length);

static int indexFor(int h, int length) {        return h & (length-1);}


原理:java中的HashMap是基于哈希表的 Map 接口的实现,内部是用数组+链表实现的,性能方面 哈希表>二叉树>线性表.为什么哈希表这么快呢?通过查看源码得知

通过把哈希值和数组长度进行与运算,为什么要进行与运算呢?因为与运算后得到的数字一定大于等于0并且小于等于数组长度。
(&运算:同位都为1则为1,否则为0。这样2个数进行&运算后得到的10进制数一定0<=n<=len)。

--------------------------------------
联想:不废话单刀直入,HashMap是由hash和链表混搭成的,于是我就想到为什么不那hash和平衡二叉树进行混搭呢?那样即便是冲突了,访问速度也不会完全退化到线性表啊!我想这个我们的Doug Lea大牛应该早就考虑过了,我估计他主要是HashMap做为单纯的hash表来使用,告知使用者尽量减少冲突,那个链表只是个小小的辅助职业而已。

于是我想在以后的开发中如果有比如有某个需求会用到hash+tree,那这还真是个不错的想法,至少这样混搭避免了大数组的创建和拷贝。

热点排行