读书人

为啥是哈希表?

发布时间: 2013-10-31 12:03:52 作者: rapoo

为什么是哈希表?!

public void put(String key,Clerk clerk){int index = hash(key);int step = hashStep(key);while(clerkArray[index] != null){index += step;index %= clerkArray.length;}clerkArray[index] = clerk;}public int hashStep(String key){return 5 - Integer.parseInt(key) % 5;}

?

??????? 也许我们会问,为什么会有这三种方法呢?产生的原因是什么呢?

??????? 产生这三个方法的原因是,在处理哈希冲突的时候会引起聚焦(就是元素会聚集在发生冲突的地方,从而会影响哈希表的性能),因此这三种方法依次减弱了这种聚焦效应。同时在这里也可以解释为什么数组的长度要选择质数?如果不选择质数,那么总有一个比原数小,而比1大的数整除这个长度,所以当我们按照我们选择的步长去移动时,可能会出现整除数组长度的情况,那么这会使得移动跳过某些空位,而在固定的几个位置上进行检测,但是如果长度是质数,就会避免这种情况。

?

3、问题总结

?

??????现在我们可以由上面的结果,就可以实现我们自己的哈希表了,因为上面已经描述了,如何进行哈希化处理得到数组索引,在得到索引冲突时,该如何处理冲突。然后剩下的工作就是围绕这两点展开的,来实现查找,删除或是添加等方法,在这里就不再赘述了。

?

?????? 下一篇博客会来分析自带的Hashtable和HashMap源码,来提高对哈希的进一步认识,及Hashtable和HashMap之间的比较!

读书人网 >编程

热点推荐