专注培养泛IT高端人才

陕西新榜样官方网站

您的位置: 主页 > 新闻动态 > IT资讯 >

影响哈希算法的因素有哪些?

来源:西安JAVA培训 发布时间:2018-06-19 浏览量:

  影响哈希算法的因素有哪些?

  首先必然是密匙的哈希值不能重复,重复的话会导致链表保存的失效。

  其次,如果使用求余,那必然会产生大量重复。

  最后,则是整体链表的大小,300个元素,分布在长度30的数组,无论如何都会出现多元素富集。

  下面进行一点实例分析:

  一般的算法常常使用“31”这个数字,使用31作为乘数因子是因为它是一个比较合适大小的质数:如值过小,当参与计算hashcode的项数较少时会导致积过小;如为偶数,则相当于是左位移,当乘法溢出时会造成有规律的位信息丢失。而这两者都会导致重复率增加。

  如果使用32作为乘数因子(相当于<<5),以字符串“abcabcabcabcabc”为例,字符串末尾每3个字母就会产生一个重复的hashcode。这并不是一个巧合,即使换成其它的英文字母,也有很容易产生重复,而使用质数则会大大地减少重复可能性。有兴趣的可以参照上图去作一下左位移运算,会发现这并不是偶然。

  《EffectiveJava》一书中详细描述了hashcode的生成规则和注意事项,有兴趣的可以去看看。

  从源代码的hashCode()方法可知,String类对象保存了已经计算好的hashCode,如果已经调用过hashCode()方法,那么第二次调用时不会再重新生成,而是直接返回已经计算好的hashCode。

  String对象总是会存放到String类私有维护的常量池中,不显式使用new关键字时,如果常量池中已经有value相同的对象,那么总是会返回已有对象的引用。因此,很多情况下生成hashCode这种比较昂贵的操作实际上并不需要执行。

  陕西新榜样软件科技有限公司是一家西安软件培训的龙头企业,拥有众多的师资力量与良好的教学环境,致力于打造西安最权威最专业的IT培训平台。陕西新榜样会定期发布西安软件培训等相关资料文章,包括:西安JAVA培训西安UI培训WEB开发培训网络营销工程师培训等领域,敬请关注!

  西安JAVA培训热线:029-63326555

  西安软件培训网址:www.xinbangyang.com

  联系地址:陕西省西安市碑林区东大街端履门云龙大厦9楼

IT培训 服务