全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java 中HashCode重复的可能性

java 中HashCode重复的可能性

今天有同事提议用String的hashcode得到int类型作为主键。其实hashcode重复的可能性超大,下面是java的缺省算法:  

public int hashCode() { 
  int h = hash; 
  if (h == 0) { 
    int off = offset; 
    char val[] = value; 
    int len = count; 
 
      for (int i = 0; i < len; i++) { 
        h = 31*h + val[off++]; 
      } 
      hash = h; 
    } 
    return h; 
  }

但是什么情况下会重复?下面是测试代码

import java.util.HashMap; 
 
public class Test { 
 
  static HashMap map = new HashMap(); 
 
  private static char startChar = 'A'; 
 
  private static char endChar = 'z'; 
 
  private static int offset = endChar - startChar + 1; 
 
  private static int dup = 0; 
 
  public static void main(String[] args) { 
    int len = 3; 
    char[] chars = new char[len]; 
    tryBit(chars, len); 
    System.out.println((int)Math.pow(offset, len) + ":" + dup); 
  } 
 
  private static void tryBit(char[] chars, int i) { 
    for (char j = startChar; j <= endChar; j++) { 
      chars[i - 1] = j; 
      if (i > 1) 
        tryBit(chars, i - 1); 
      else 
        test(chars); 
    } 
  } 
 
  private static void test(char[] chars) { 
 
    String str = new String(chars).replaceAll("[^a-zA-Z_]", "").toUpperCase();// 195112:0 
    //String str = new String(chars).toLowerCase();//195112:6612 
    //String str = new String(chars).replaceAll("[^a-zA-Z_]","");//195112:122500 
    //String str = new String(chars);//195112:138510 
    int hash = str.hashCode(); 
    if (map.containsKey(hash)) { 
      String s = (String) map.get(hash); 
      if (!s.equals(str)) { 
        dup++; 
        System.out.println(s + ":" + str); 
      } 
    } else { 
      map.put(hash, str); 
      // System.out.println(str); 
    } 
  } 
} 

在A-z范围内有特殊字符,从结果看,仅仅3位长度的字符串:

不处理: 138510次重复

去掉字母意外字符: 122500次重复

所有字符转小写:6612次重复(少了很多)

去掉字母意外字符,并且转小写:没有重复!4位字符串也没见重复

不难看出:

1. 缺省实现为英文字母优化
2. 字母大小写可能导致重复

可能:

长字符串可能hashcode重复
中文字符串和特殊字符可能hashcode重复

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持,如有疑问请留言或者到本站社区交流讨论,大家共同进步!


# java  # HashCode  # HashCode的重复测试  # java中hashCode方法与equals方法的用法总结  # 详解hashCode()和equals()的本质区别和联系  # 重写hashCode()和equals()方法详细介绍  # JAVA hashCode使用方法详解  # 详解Java中用于查找对象哈希码值的hashCode()函数  # 为什么在重写 equals方法的同时必须重写 hashcode方法  # why在重写equals时还必须重写hashcode方法分享  # javascript中实现兼容JAVA的hashCode算法代码分享  # 重新实现hashCode()方法  # 特殊字符  # 也没  # 如有  # 希望能  # 少了  # 内有  # 谢谢大家  # 英文字母  # 共同进步  # 主键  # 疑问请  # 情况下  # return  # import  # count  # len  # lt  # startChar  # map  # private 


相关文章: 如何快速上传建站程序避免常见错误?  如何选择服务器才能高效搭建专属网站?  如何快速搭建高效服务器建站系统?  如何选择适配移动端的WAP自助建站平台?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  网站制作公司,橙子建站是合法的吗?  如何实现建站之星域名转发设置?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  深圳网站制作案例,网页的相关名词有哪些?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  动图在线制作网站有哪些,滑动动图图集怎么做?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  seo网站制作优化,网站SEO优化步骤有哪些?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  网站专业制作公司有哪些,做一个公司网站要多少钱?  如何快速搭建自助建站会员专属系统?  建站之星官网登录失败?如何快速解决?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  如何快速查询网站的真实建站时间?  建站之星安装提示数据库无法连接如何解决?  建站DNS解析失败?如何正确配置域名服务器?  智能起名网站制作软件有哪些,制作logo的软件?  如何在腾讯云服务器快速搭建个人网站?  ,制作一个手机app网站要多少钱?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  网站企业制作流程,用什么语言做企业网站比较好?  建站与域名管理如何高效结合?  建站主机选哪种环境更利于SEO优化?  如何挑选优质建站一级代理提升网站排名?  如何选购建站域名与空间?自助平台全解析  如何通过wdcp面板快速创建网站?  javascript中的try catch异常捕获机制用法分析  建站主机空间推荐 高性价比配置与快速部署方案解析  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  网站网页制作专业公司,怎样制作自己的网页?  官网网站制作腾讯审核要多久,联想路由器newifi官网  重庆网站制作公司哪家好,重庆中考招生办官方网站?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  建站之星如何防范黑客攻击与数据泄露?  c# 在ASP.NET Core中管理和取消后台任务   

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。