文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java项目中什么情况下HashCode会出现重复

2023-05-31 08:48

关注

java项目中什么情况下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位字符串也没见重复

不难看出:

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

可能:

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

关于java项目中什么情况下HashCode会出现重复问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯