将通用集合转换为数组

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,然后再尝试向其添加条目。