如何快速构造两个hashCode相同的字符串

2023-10-30

这要从hashCode的源码说起,String类hashCode的代码如下所示

    public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

假设要构造的字符串只有两个字符,用“ab”和“cd”,上面的代码就变成了如果两个hashCode相等,则满足下面的公式。

a * 31 + b = c * 31 + d

=> 31 * (a - c) = d - b

其中一个特殊解是a-c=1,d-b=31,也就是只有两个字符的字符串“ab”与“cd”满足a-c=1,d-b=31,这两个字符串的hashCode就一定相等,比如“Aa”和“BB”,“Ba”和“CB”,“Ca”和“DB”,依次类推。

 

摘抄自张亚《深入理解JVM字节码》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何快速构造两个hashCode相同的字符串 的相关文章

随机推荐

  • 简单案例分析

    今天做了几个案例 我不太会 还有人说我笨 还说我逻辑思维有问题 其实我感觉也是 他说的对 我就是有点笨 逻辑还跟不上 我希望多对别人宽容与帮助 多给那些原本就不太会的同学一些鼓励 案例1 设计并实现打印一个四位数的逆序数的程序 例如 123
  • 计算日期间隔的巧妙代码C++

    int Date daysTo int year int month int day int y1 m1 d1 int y2 m2 d2 m1 m 9 12 y1 y m1 10 d1 365 y1 y1 4 y1 100 y1 400 m
  • oracle-超全的多表查询连接

    Oracle 聚合函数 Oracle 日期 时间函数 一 简述 1 两个表的连接 是通过将一个表中的一列或者多列同另一个表中的列连接而建立起来的 用来连接两张表的表达式组成了连接条件 当连接成功后 第二张表中的数据就同第一张表连接起来了 并
  • C#学习笔记 LINQ简单使用

    LINQ是C 中的一项非常好用的功能 全程是语言集成查询Language Integrated Query LING和SQL类似 但是不仅可以查询数据库中的数据 还可以查询文件 XML 对象集合等等 要使用LINQ特性 需要引用System
  • 购物车测试点

  • 【计算机网络】湖科大微课堂笔记 p67-70 应用层概述、客户-服务器方式和对等方式、动态主机配置协议DHCP、域名系统DNS

    文章目录 应用层概述 客户 服务器方式和对等方式 动态主机配置协议DHCP 小结 域名系统DNS 小结 一些例题 应用层概述 客户 服务器方式和对等方式 客户 服务器方式 对等方式 动态主机配置协议DHCP DHCP的作用 DHCP工作过程
  • mysql事务回滚是什么意思_Mysql事务提交及事务回滚是什么意思

    本篇文章主要给大家介绍mysql事务提交及事务回滚的相关知识 事务可以说是一段sql 语句的批处理 但是这个批处理是一个atom 原子 不可分割 要么都提交执行 要么回滚 rollback 都不执行 关于事务的详细定义介绍 我们在之前的文章
  • 6678开发板NDK网口通信完整实现(附源码)

    写在前面 1 已经有很多前辈做过很优秀的记录 本篇尽量讲得详细一点 能够让新手直接上手 2 在整个调试过程中 会遇到各种各样的问题 如果遇到问题请看第四部分 大部分问题应该能解决掉 不能解决的就评论区留言 3 我的CCS安装路径是 C Ti
  • simpleitk 读数据 图像 dicom nii 处理数据

    最近在使用 simpleITK 读取dicom nii 处理数据 非常方便 下面记录一下 1 读取DICOM序列 医学图像中一个CT序列包含很多张图片 即一个case包含许多slice 使用SimpleITK可以直接读取一个序列 impor
  • 基于微信小程序的电影院订票选座系统

    随着数据库技术和无线互联网的发展 各行业的数据信息量快速增多 正是由于这种发展形势 数据量变得非常杂乱无序 必须通过信息系统来选择用户需要的信息 本文通过微信小程序平台上研发电影院订票选座系统 解决部分电影院只能通过实体前台订票选座问题 本
  • BUCK BOOST学习总结

    首先对于我这种电源方面的小白来说 关于电源用的最多的就是线性稳压了 开关类的如 TI 的TPS系列 我是只知道应用电路而不知道具体原理的 但是长此以往也不是个办法 于是今天就带打家详细的来讲一下 BUCK BOOST电路的原理 先挂几个连接
  • JavaScript中的实例对象与函数对象、回调函数、JavaScript的error处理

    区别实例对象与函数对象 实例对象 new 函数产生的对象 称为实例对象 简称为对象函数 函数对象 将函数作为对象使用时 简称为函数对象 function Fn Fn函数 const fn new Fn Fn是构造函数 fn是实例对象 简称为
  • Windows10下TELEDYNE DALSA相机连接电脑以及网卡配置教程

    文章目录 一 相机IP地址设置 二 网卡端口设置 一 相机IP地址设置 右键相机 选择Scan Network 选择SHOW Status Dialog Box 出现发现的设备 设备显示为红色说明连接有问题 这里有两种解决办法 一种是以下文
  • QT button样式-边界宽度颜色设置

    1 QT QSS设置按钮边界样式 QT设置按钮边界样式 本学习添加三个按钮来做研究 QVBoxLayout vbox new QVBoxLayout QWidget w new QWidget this this gt setCentral
  • 安卓ShapeDrawable基本属性

    shape android shape rectangle oval line ring 可以设置为矩形 椭圆形 线性和环形 corners corners 用来定义圆角 有以下可用属性 android radius android top
  • 迷人的MCU单片机

    迷人的MCU单片机 MCU Microcontroller Unit 微控制单元 又称单片微型计算机 Single Chip Microcomputer 简称单片机 是把中央处理器 Central Process Unit CPU 的频率与
  • 智能驾驶数据集 合集

    智能驾驶数据集 集合 智能驾驶图像数据 No 1 103 300张驾驶员行为标注数据 驾驶员行为标注数据 总数据量103 300张 车内摄像头拍摄 且采集多年龄段 多时段 多种驾驶行为 关键点标注准确率不低于95 手势矩形框 人脸属性信息标
  • C++左值和右值

    这里有个误区 左值不是 left value 而是 location value 可寻址的值 右值不是 right value 而是 read value 只可读的值 所以 变量地址可读可写的是左值 只可读的是右值
  • 我的 Python.color() (Python 色彩打印控制)

    我的CSDN主页 My Python 学习个人备忘录 我的HOT博 自学并不是什么神秘的东西 一个人一辈子自学的时间总是比在学校学习的时间长 没有老师的时候总是比有老师的时候多 华罗庚 我的 Python color Python 色彩打印
  • 如何快速构造两个hashCode相同的字符串

    这要从hashCode的源码说起 String类hashCode的代码如下所示 public int hashCode int h hash if h 0 value length gt 0 char val value for int i