Java 字母数字哈希码法

Java 字母数字哈希码法,java,hash,Java,Hash,我有个问题想不出来,我不知道怎么了。所以我有一个生成器,可以生成一个随机的字母数字字符串,长度可以是两个或三个字符。为了测试这个hashCode方法是否“完美”,我将字符串及其hashCode存储在两个TreeMaps中:一个存储,另一个,以便过滤出重复项 假设,如果我的方法是一个完美的方法,那么两个TreeMaps将是相同的长度。。。但事实并非如此 我试图通过获取每个字符,计算它们的整数值,然后将整数值添加到字符串中,然后将该字符串转换为整数来生成hashCodes。假设不存在任何冲突,因为每

我有个问题想不出来,我不知道怎么了。所以我有一个生成器,可以生成一个随机的字母数字字符串,长度可以是两个或三个字符。为了测试这个
hashCode
方法是否“完美”,我将字符串及其
hashCode
存储在两个
TreeMap
s中:一个存储
,另一个
,以便过滤出重复项

假设,如果我的方法是一个完美的方法,那么两个
TreeMap
s将是相同的长度。。。但事实并非如此

我试图通过获取每个字符,计算它们的整数值,然后将整数值添加到字符串中,然后将该字符串转换为整数来生成
hashCode
s。假设不存在任何冲突,因为每个字符串都有自己的数字序列。为什么这不起作用

例如,我有字符串“r0x”和“x0r”。 他们的
hashCode
s应该是:

"114" + "0" + "120" --> "1140120" --> 1140120 and 

"120" + "0" + "114" --> "1200114" --> 1200114
我想不出任何两个或多个字符串以这种方式具有相同代码的实例,但是,我的测试表明确实存在

所以我的问题是,这东西应该起作用吗?我的测试有缺陷吗?还是我的逻辑有缺陷

谢谢

好的,那么你有

"114" + "0" + "120" --> "1140120" --> 1140120
但是呢

"11" + "40" + "120" --> "1140120" --> 1140120

您应该能够修改您的程序,并查看哈希代码是否已作为键存储在映射中,然后查找相应的值以查找冲突

只需考虑字符串是以62为基数的数字(0-9、a-z、a-z,所以是62个不同的字符),就可以轻松获得唯一的结果。123的哈希代码将按以下方式计算:

1 * 62^2 + 2 * 62 + 3
0 * 62^2 + 10 * 62 + 11
ab的哈希代码(其中a的值为10,b的值为11)的计算方法如下:

1 * 62^2 + 2 * 62 + 3
0 * 62^2 + 10 * 62 + 11

“为了测试这个hashCode方法是否完美”-什么hashCode方法?你只告诉过我们一个生成随机字符串的方法。。。Java中的
hashCode
返回
int
,而不是
String
。如果您发布代码、预期结果和实际结果,将更容易帮助您。(听起来你的基本想法是有缺陷的,因为带有“20 54”和“205”“4”部分的字符串是等效的……你可能需要一个分隔符。)我不同意你关于使用
String.hashCode()
的评论。虽然这是一个很好的解决方案,为无约束字符串,碰撞的数量很短,约束字符串是非常高的。在这种特殊情况下,大约一半的字符串发生冲突,例如
zz7
zxu
x4n
vrn
等。删除了那个部分。