[英]Cast generic collection an array
我试图在Java中实现一个单独的链式哈希表,并且遇到了classcastexception。
所以这就是我所做的:
private LinkedList<Entry<K,V>>[] bucketArray;
该数组将保留所有将用作链的链表。 在HashTable类中还有一个内部类Entry,每个内部类拥有一个K通用键和V通用值。
在表的构造函数中,我实际上初始化了数组:
public HashTable(int capacity, int prime) {
this.capacity = capacity;
this.prime = prime;
bucketArray = (LinkedList<Entry<K, V>>[]) new Object[this.capacity];
}
因此,质数仅用于计算压缩密钥,容量用于数组大小。 但是当我运行时,jvm会抛出classcastexception。
如果我将新对象更改为新的LinkedList [this.capacity],则put方法中将出现一个nullpointer异常,如下所示:
public void put(K k, V v) {
int h = hashValue(k);
bucketArray[h].add(new Entry<K, V>(k, v));
}
为了简单起见,hashvalue方法始终返回1。
如何才能正确完成?
似乎您正在尝试将Object[]
LinkedList[]
转换为LinkedList[]
-这就是为什么会出现错误的原因。 实际上,如果您创建正确的类型,则甚至不需要强制转换:
bucketArray = new LinkedList[this.capacity];
你NPE是一个不同的问题-你分配的bucketArray
,但在它的每个项目是null
-你可能会想要做一个空检查bucketArray[h]
并将其分配给一个new LinkedList
试图将条目添加到前它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.