java - 将泛型集合转换为数组

标签 java arrays generics casting

我正在尝试在 Java 中实现一个单独的链式哈希表,并且遇到了 classcast 异常。

这就是我所做的:

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];
}

所以素数只是用来计算压缩 key ,容量是数组大小。但当我运行时,jvm 抛出 classcastException。

如果我将 new Object 更改为新 LinkedList [this.capacity],那么我的 put 方法中会出现空指针异常,如下所示:

public void put(K k, V v) {
    int h = hashValue(k);
    bucketArray[h].add(new Entry<K, V>(k, v));
}

为了简单起见,hashvalue 方法始终返回 1。

怎样才能正确完成呢?

最佳答案

看起来您正在尝试将 Object[] 转换为 LinkedList[] - 这就是您收到错误的原因。事实上,如果您创建了正确的类型,则甚至不需要强制转换:

bucketArray = new LinkedList[this.capacity];

您的 NPE 是一个不同的问题 - 您已经分配了 bucketArray,但其中的每个项目都是 null - 您可能想要对bucketArray[h] 并将其分配给新的 LinkedList,然后再尝试向其中添加条目。

关于java - 将泛型集合转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28118815/

相关文章:

Java 不返回任何内容的递归

java - 枚举类型的约束泛型类型以实现某些接口(interface)

c# - 对值类型使用通用约束

java - 否定比较链

java - org.hibernate.HibernateException : Unable to access lob stream Postgresql 9. 6

java - 自动导入和更新pom.xml [intelliJ idea 13]

arrays - 离开 DispatchGroup 导致我的代码崩溃

python - 如何打印特定的json列表项?

java - 完成解决方案所需的输入

java - 返回类型是删除的一部分吗?