1

我理解哈希表背后的想法,但实现变得令人沮丧。我做了一些阅读并得到了不同的答案。我读过我可以实现一个通用的对象数组,如下所示:

TableContainer[] classTable = 
    (TableContainer<Object,Object>[]) new TableContainer[256];

其中 tableContainer 是:

class TableContainer<key,val>{
    Object key = null;
    Object val = null;
}

我遇到的问题是,当我尝试在函数中传递以下代码时:

classTable[i].key = x

我得到一个空指针异常。我知道在 java 中创建泛型数组会因为类型擦除而变得混乱,但我认为上面的实现会起作用。有没有办法创建一个泛型列表或数组以用作哈希表?(不允许哈希表/哈希图类)

4

2 回答 2

6

您仍然必须先初始化数组中的对象引用,然后才能使用它们。像这样

tableContainer[] a = new tableContainer<Whatever, SomeClass>[SIZE];
for ( int i = 0 ; i < a.length; i++ ) {
     a[i] = new tableContainer<Whatever, SomeClass>();
}

当然,您必须将数组初始化为大于 0 的大小,这与您的示例不同。

于 2012-11-11T19:48:48.217 回答
3

首先,您正在创建一个空数组:

new TableContainer[0]

而且由于您无法随着时间的推移调整数组的大小,因此没有多大意义。如果您实际上创建了一个正数大小的数组,您必须记住一件事:您创建了一个引用数组。默认情况下,每个数组都被初始化为默认(零)值,这恰好是null用于引用。

因此你需要这样的东西:

classTable = new TableContainer[8];
classTable[0] = new TableContainer();
//...later
if(classTable[0] != null) {  //will pass for [0], but not for [1]
  classTable[0].key
}
于 2012-11-11T19:49:10.360 回答