繁体   English   中英

将通用集合转换为数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM