我在大学时遇到过项目问题,我们必须在类中编写一个双哈希方法,它返回一个双哈希字符串对象。考虑到Java中有一个内置的hashCode()方法,我认为这会相对简单,但是当你第二次遍历hashCode时,它会返回完全相同的值。例如:
StringHashCode.java:
public class StringHashCode implements HashCode{
@Override
public int giveCode(Object obj) {
return obj.hashCode();
}
}
spell.java
while(dict_fwr.hasNextWord())
{
String derp = dict_fwr.nextWord();
System.out.print(derp + "(hash value = " + impl.giveCode(derp) + ")" + "(Double hashed = " + impl.giveCode(impl.giveCode(derp)) + ")\n" );
}
摘自输出:
midwest(hash value = 1055712247)(Double hashed = 1055712247)
partakes(hash value = 1188620491)(Double hashed = 1188620491)
interspersed(hash value = 486466540)(Double hashed = 486466540)
marginally(hash value = 1971567014)(Double hashed = 1971567014)
bemoans(hash value = -223340895)(Double hashed = -223340895)
bankrupt(hash value = -1858199613)(Double hashed = -1858199613)
transpire(hash value = 1052958868)(Double hashed = 1052958868)
conspire(hash value = -567922531)(Double hashed = -567922531)
Dict是一个包含单词列表的文件,该类是由讲师创建的类,它返回下一个字符串并检查是否有另一个单词。
答案 0 :(得分:1)
您将int
传递给giveCode()
。这将作为整数自动装箱。哈希码值的哈希码是相同的,因为整数的哈希码是整数值。来自docs:
返回:此对象的哈希码值,等于此Integer对象表示的原始int值。
答案 1 :(得分:1)
您可以尝试哈希哈希码的toString:
public static int doubleHash(Object obj){
return new Integer(obj.hashCode()).toString().hashCode();
}
答案 2 :(得分:0)
原始类型int
没有方法hashCode
,因此默认返回自己。
您必须编写自己的哈希方法来处理此问题,或者将int作为扩展Object
类的类传回。
Read up关于哈希如何更好地理解为什么整数被解析成他们自己的原始形式。简而言之:输入值被映射到不同的值范围以表示它们。如果没有给Integer的映射,则默认值为整个整数范围,映射到自身。
答案 3 :(得分:0)
问题是,对象的hashCode是int
。将int
装入Integer
时,返回的hashCode将再次为int
。
要解决此问题,请使用int
hashCode并使其成为String,然后获取第二个String的hashCode。
这是一个主要方法中的步骤:
public class StringHashCode {
public static void main(String[] args) {
// make a String
String stringToDoubleHash = "Hi There";
// hashCode of the String
int hashCode = stringToDoubleHash.hashCode();
// String representation of hashCode
String hashCodeString = Integer.toString(hashCode);
// hashCode of String representation of first hashCode
int doubleHash = hashCodeString.hashCode();
System.out.println(hashCode);
System.out.println(doubleHash);
}
}
打印出来:
623806085
2090143206
根据您的需要进行调整。