将通用集合转换为数组
Cast generic collection an array
我正在尝试在 Java 中实现一个单独的链式哈希 table,我遇到了 classcastexception。
这就是我所做的:
private LinkedList<Entry<K,V>>[] bucketArray;
这个数组将保存所有将用作链的链表。 class 哈希表中还有一个内部 class 条目,每个条目都包含一个 K 通用键和 V 个通用值。
在 table 的构造函数中,我实际上初始化了数组:
public HashTable(int capacity, int prime) {
this.capacity = capacity;
this.prime = prime;
bucketArray = (LinkedList<Entry<K, V>>[]) new Object[this.capacity];
}
所以素数只是用于计算压缩密钥,容量用于数组大小。但正如我 运行 jvm 抛出 classcastexception.
如果我将新对象更改为新链表 [this.capacity],那么我的 put 方法中会出现空指针异常,如下所示:
public void put(K k, V v) {
int h = hashValue(k);
bucketArray[h].add(new Entry<K, V>(k, v));
}
为简单起见哈希值方法总是returns1.
如何正确完成?
您似乎在尝试将 Object[]
转换为 LinkedList[]
- 这就是您收到错误的原因。事实上,如果您创建正确的类型,甚至不需要强制转换:
bucketArray = new LinkedList[this.capacity];
您的 NPE 是一个不同的问题 - 您已经分配了 bucketArray
,但其中的每一项都是 null
- 您可能想要对 [=15= 进行空检查] 并将其分配给 new LinkedList
,然后再尝试向其添加条目。
我正在尝试在 Java 中实现一个单独的链式哈希 table,我遇到了 classcastexception。
这就是我所做的:
private LinkedList<Entry<K,V>>[] bucketArray;
这个数组将保存所有将用作链的链表。 class 哈希表中还有一个内部 class 条目,每个条目都包含一个 K 通用键和 V 个通用值。
在 table 的构造函数中,我实际上初始化了数组:
public HashTable(int capacity, int prime) {
this.capacity = capacity;
this.prime = prime;
bucketArray = (LinkedList<Entry<K, V>>[]) new Object[this.capacity];
}
所以素数只是用于计算压缩密钥,容量用于数组大小。但正如我 运行 jvm 抛出 classcastexception.
如果我将新对象更改为新链表 [this.capacity],那么我的 put 方法中会出现空指针异常,如下所示:
public void put(K k, V v) {
int h = hashValue(k);
bucketArray[h].add(new Entry<K, V>(k, v));
}
为简单起见哈希值方法总是returns1.
如何正确完成?
您似乎在尝试将 Object[]
转换为 LinkedList[]
- 这就是您收到错误的原因。事实上,如果您创建正确的类型,甚至不需要强制转换:
bucketArray = new LinkedList[this.capacity];
您的 NPE 是一个不同的问题 - 您已经分配了 bucketArray
,但其中的每一项都是 null
- 您可能想要对 [=15= 进行空检查] 并将其分配给 new LinkedList
,然后再尝试向其添加条目。