【HashCode】字符串哈希码巧合验证

2024-01-26 09:48

本文主要是介绍【HashCode】字符串哈希码巧合验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

已知哈希码是根据对象特性生成,但是还是会存在不同对象计算出相同哈希码的巧合。今天以String为例进行了验证。

代码如下:

import java.util.HashSet;
import java.util.Random;
/**
* Test Clazz
* @author Lix
*/
public class Test{
public static final int SIZE = 7;
public static final int TIME = 100000;
public static void main(String argv[]){
HashSethsi = new HashSet(); 
HashSethss = new HashSet(); 
Random ra = new Random();
StringBuffer sb;
String tempString = "";
for (int i = 0; i < TIME; i++) {
sb = new StringBuffer();
for (int j = 0; j < SIZE; j++) {
sb.append((char)(ra.nextInt(26)+97));
}
tempString = sb.toString();
//System.out.println(tempString);
if(!hsi.add(tempString.hashCode())){
System.out.println("HashCode:"+tempString.hashCode());
System.out.println("String A:"+tempString);
for(Object obj:hss){
if(obj.hashCode() == tempString.hashCode() && !obj.equals(tempString)){
System.out.println("String B:"+obj);
}
}
}
hss.add(tempString);
}
System.out.println(hss.size()+":"+hsi.size()+"\n");
System.out.println("\nExample:");
String a = "mvnjdam";
String b = "wlosaru";
String c = "ypxludk";
String d = "tuwwvkg";
String e = "wmriczg";
String f = "rrqtebc";
System.out.println("a.hash:"+a.hashCode()+"\nb.hash:"+b.hashCode());
System.out.println("c.hash:"+c.hashCode()+"\nd.hash:"+d.hashCode());
System.out.println("e.hash:"+e.hashCode()+"\nf.hash:"+f.hashCode());
}
}
例如在随机字符串长度为7(全部为小写字母)时,生成的十万个字符串有一定几率出现多个字符串不同而Hash码相同的情况。

因此,在某些需要进行String严格比较的场合,需要在哈希码比较验证之后追加equals比较验证。

这篇关于【HashCode】字符串哈希码巧合验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/646415

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2