我必须为我的一个uni类创建一个关系数据库管理系统。我正在使用链接,并且有一个模糊的问题。当我通过让put(),remove()和get()键运行我的JUnit测试器时,长度为2个字符,一切都按预期运行。当我开始使用密钥长度为3或更长的键值对时,一切都会立即失败。
起初,我认为这是我的哈希函数,但经过几个小时我没有做任何改进。这是它的样子。教师的模块规范只要求我们为字符串对象创建一个哈希函数算法。否则,我们调用Object类的hashCode()。
public int myHash(K key){
int hash = 0;
if(key instanceof String){
for (int i = 0; i < key.toString().length(); i++) {
hash += hash*31+ key.toString().charAt(i);
}
if(hash < 0){
hash = (int)Math.abs(hash);
}
}else{
Object obj = (Object) key;
hash = key.hashCode();
}
System.err.println(hash % size);
return hash;
}
我使用调试行运行了许多测试,似乎我的方法到达了正确的索引位置,但返回null而不是所需的值。再次,我的put(K键,V值),删除(K键),get(K键)对键长度为2的键的所有工作,但在更长的键长度时“中断”。关于这是为什么的任何想法?
(编辑:拼写/语法错误)