哈希表模糊失败

时间:2017-12-03 19:19:44

标签: java hash hashmap hashtable chaining

我必须为我的一个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的键的所有工作,但在更长的键长度时“中断”。关于这是为什么的任何想法?

(编辑:拼写/语法错误)

0 个答案:

没有答案