Rehashing方法抛出NullPointerException

时间:2014-04-24 14:43:02

标签: java hash overflow

我正在尝试自动创建一个容量增加1.25的新hashTable的方法,但是我有一个溢出错误。代码是:

public void reHash (){

    Config.MAX_ESTACIONS = (int) (Config.MAX_ESTACIONS * 1.25);
    Vector<EstacioHash>[] newHashTable = new Vector[Config.MAX_ESTACIONS];

    EstacioHash nouElement = new EstacioHash();

    for (int i=0; i<hashTable.length;i++){
        for (int k=0; k<hashTable[i].size();k++){

            nouElement.key = hashTable[i].get(k).key;
            nouElement.value = hashTable[i].get(k).value;

            int position = hashFunction(nouElement.key);
            newHashTable[position].add(nouElement); <---- OverFlow here
        }
    }

    hashTable = newHashTable;

}

为什么我有一个过流?程序在没有rehash功能的情况下正确运行。哈希函数是:

public int hashFunction (Object clau){

    String clauMinuscules = ((String) clau).toLowerCase(); 

    char[] key = clauMinuscules.toCharArray(); 
    int result=0;

    for (int i=0;i<key.length;i++){
        result = (result + key[i]^i)%Config.MAX_ESTACIONS;
    }

    return result;
}

1 个答案:

答案 0 :(得分:1)

我认为你没有溢出,但更多的是NullPointerException

Object的默认值为null。创建新表时,您的数组中包含null个值。

您需要初始化newHashTable的每个条目,然后尝试在某个位置获取Vector并在其中添加内容。

Vector<EstacioHash>[] newHashTable = new Vector[Config.MAX_ESTACIONS];
for (int i=0; i<newHashTable.length;i++){
    newHashTable[i] = new Vector<EstacioHash>();
}