我想创建一个链式哈希表。它需要是一个链接列表的列表,目录说我应该这样做:
ArrayList<LinkedList<String>> hashTable
要初始化表,我使用以下代码:
public static ArrayList<LinkedList<String>> createNewTable (){
double tableSize = Math.pow(baseTableSize, initialTableExponent);
for (int i = 0; i < tableSize; i++){
LinkedList<String> row = new LinkedList<String>();
hashTable.add(row);
}
return hashTable;
}
但是,当我在"主"中运行它时,我会得到一个例外:
线程"main"java.lang.NullPointerException 中出现异常
问题出在哪里?有更好的方法吗?
谢谢!
此
ArrayList<LinkedList<String>> hashTable;
应该是
ArrayList<LinkedList<String>> hashTable = new ArrayList<>();
即,您应该安装hashTable。
假设hashTable是一个成员变量,您可以在构造函数中执行此操作;
hashTable = new ArrayList<LinkedList<String>>();
您刚刚声明了名为hashTable的ArrayList变量,但没有对其进行初始化。在此阶段不会分配内存。对于Java,如果您谈论的是基元类型,那么它们具有由编译器指定的默认值。对于引用类型(Collection Framework),它们只是充当一个钩子,您需要实例化类并将其分配给引用变量。
如果你写了,你的代码就没有错
hashTable = new ArrayList<LinkedList<String>>();
在另一行。
或者,你也可以在一行中完成。
ArrayList<LinkedList<String>> hashTable = new ArrayList<>();
现在您的代码应该可以工作了。