LinkedList哈希表中的空指针异常

时间:2014-10-15 00:48:25

标签: java pointers hash null linked-list

所以我使用乘法方法使用LinkedLists创建一个哈希表。作为一个实例变量,我定义了我将要使用的LinkedList“T”,并且在类的构造函数中我指定了T的大小。但是,每次运行我的Driver测试类时,我都会得到NullPointerExceptions我尝试在T[]中引用任何的所有内容。我忽略了什么吗?我花了一个多小时试图解决这个问题。

ChainedHashTable类:

public class ChainedHashTable
{
    private LinkedList<Integer>[] T;
    private int m;
    private double A;

    public ChainedHashTable(int n)
    {
        for (m = 1; m < n; m *= 2);
        T = new LinkedList[m];
        Random random = new Random();
        int s = random.nextInt(Integer.MAX_VALUE);
        A = (s * 1.00) / Integer.MAX_VALUE;
    }

    public void insert(Integer key)
    {
        T[hash(key)].add(Integer.valueOf(key));
    }

    public void delete(int key)
    {
        T[hash(key)].remove(Integer.valueOf(key));
    }

    public Integer search(int key)
    {
        int n = T[hash(key)].indexOf(key);
        if (n == -1)
            return -1;
        else
            return T[hash(key)].get(n);
    }

    private int hash(int key)
    {
        System.out.println((int)(m * ((key * A) % 1)));
        return (int)(m * ((key * A) % 1));
    }

    public void printTable()
    {
        for (int i = 0; i < T.length; i++)
        {
            System.out.println("index: " + i + " " + T[i]);
        }
    }
}

驱动程序类:

public class Driver
{
    public static void main(String[] args)
    {
        ChainedHashTable test1 = new ChainedHashTable(20);
        test1.printTable();
        test1.insert(4);
        test1.insert(54);
        test1.insert(6);
        test1.insert(3);
        test1.insert(26);
        test1.insert(54);
        test1.insert(11);
        test1.insert(10);
        test1.insert(76);
        test1.insert(42);
        test1.insert(41);
        test1.insert(32);
        test1.insert(87);
        test1.insert(76);
        test1.insert(72);
        test1.insert(57);
        test1.insert(29);
        test1.insert(16);
        test1.insert(92);
        test1.insert(64);
        test1.printTable();
    }
}

1 个答案:

答案 0 :(得分:0)

您正在创建引用数组以键入LinkedList并将其设置为初始状态,即null

T = new LinkedList[m];

T现在是计算出的大小m的数组。您需要初始化数组内的对象。

T = new LinkedList[m];
for (int i = 0; i < m; i++) {
    T[i] = new LinkedList<>();
}